@dollhousemcp/mcp-server 1.6.1 → 1.6.3

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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.6.3] - 2025-08-25
11
+
12
+ ### Fixed
13
+ - **OAuth Authentication** - Fixed invalid OAuth client ID and added comprehensive error handling
14
+ - Updated default client ID from incorrect `Ov23liXGGP9jNrBhBNfO` to correct `Ov23li9gyNZP6m9aJ2EP`
15
+ - Added unique error codes throughout OAuth flow for precise debugging
16
+ - Added debug logging at each step of the authentication process
17
+ - Improved error messages to be specific and actionable
18
+ - Fixed TypeScript compilation issue with missing DeviceCodeResponse import
19
+
20
+ ## [1.6.2] - 2025-08-25
21
+
22
+ ### Fixed
23
+ - **Critical OAuth Bug** - Fixed default client ID not being used in `setup_github_auth`
24
+ - The v1.6.1 release had a bug where `setupGitHubAuth()` bypassed the default fallback
25
+ - Made `GitHubAuthManager.getClientId()` public instead of private
26
+ - Updated `setupGitHubAuth()` to use proper fallback chain
27
+ - Now correctly uses default OAuth client ID when no configuration exists
28
+ - Restores the "just works" authentication experience promised in v1.6.1
29
+
10
30
  ## [1.6.1] - 2025-08-25
11
31
 
12
32
  ### Fixed
package/README.md CHANGED
@@ -30,9 +30,9 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
30
30
  **🏪 Collection**: https://github.com/DollhouseMCP/collection
31
31
  **📦 NPM Package**: https://www.npmjs.com/package/@dollhousemcp/mcp-server
32
32
  **🌍 Website**: https://dollhousemcp.com (planned)
33
- **📦 Version**: v1.6.1
33
+ **📦 Version**: v1.6.3
34
34
 
35
- > **🎉 New in v1.6.1**: Default OAuth client ID for seamless GitHub authentication! Users can now authenticate without any configuration. The portfolio management system, GitHub integration, and 42 MCP tools from v1.6.0 are also included.
35
+ > **🎉 New in v1.6.3**: Fixed OAuth authentication with correct client ID and comprehensive error messages. The OAuth client ID has been corrected and detailed error codes added throughout the flow for better debugging.
36
36
 
37
37
  > **⚠️ Breaking Change**: PersonaTools have been streamlined in v1.6.0. 9 redundant tools were removed in favor of ElementTools. See [PersonaTools Migration Guide](docs/PERSONATOOLS_MIGRATION_GUIDE.md) for migration instructions.
38
38
 
@@ -42,7 +42,7 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
42
42
  # Install globally
43
43
  npm install -g @dollhousemcp/mcp-server
44
44
 
45
- # ✅ v1.6.1 includes default OAuth - authentication just works!
45
+ # ✅ v1.6.3 fixes OAuth with correct client ID!
46
46
  # Browse and submit to collection with or without authentication:
47
47
  # npm install -g @dollhousemcp/mcp-server@latest
48
48
 
@@ -735,7 +735,7 @@ get_collection_cache_health
735
735
 
736
736
  ### GitHub Authentication (v1.5.0+)
737
737
 
738
- DollhouseMCP supports GitHub OAuth device flow authentication for enhanced features. **NEW in v1.6.1**: Default OAuth client ID built-in - no configuration needed!
738
+ DollhouseMCP supports GitHub OAuth device flow authentication for enhanced features. **FIXED in v1.6.2**: Default OAuth client ID now works correctly - no configuration needed!
739
739
 
740
740
  #### OAuth Setup (For Self-Hosting)
741
741
 
@@ -1547,7 +1547,22 @@ This project is licensed under the **AGPL-3.0** License with Platform Stability
1547
1547
 
1548
1548
  ## 🏷️ Version History
1549
1549
 
1550
- ### v1.6.1 - August 25, 2025 (Current - Develop Branch)
1550
+ ### v1.6.2 - August 25, 2025 (Current - Develop Branch)
1551
+
1552
+ **Critical Hotfix**: Fixed OAuth default client ID not being used in `setup_github_auth` tool
1553
+
1554
+ #### 🔧 Bug Fixes
1555
+ - **OAuth Authentication**: Fixed critical bug where default OAuth client ID wasn't used in `setupGitHubAuth()` method
1556
+ - **Configuration Fallback**: Now correctly uses `GitHubAuthManager.getClientId()` with proper fallback hierarchy
1557
+
1558
+ #### 📚 Technical Details
1559
+ - Made `GitHubAuthManager.getClientId()` public (was private)
1560
+ - Updated `setupGitHubAuth()` to use proper fallback chain
1561
+ - Restored "just works" authentication experience promised in v1.6.1
1562
+
1563
+ ---
1564
+
1565
+ ### v1.6.1 - August 25, 2025
1551
1566
 
1552
1567
  **⚠️ Breaking Changes**:
1553
1568
  - 🔄 **Serialization Format Change** - `BaseElement.serialize()` now returns markdown with YAML frontmatter instead of JSON
@@ -42,7 +42,7 @@ export declare class GitHubAuthManager {
42
42
  *
43
43
  * @returns The OAuth Client ID to use for authentication
44
44
  */
45
- private static getClientId;
45
+ static getClientId(): Promise<string | null>;
46
46
  private static readonly DEVICE_CODE_URL;
47
47
  private static readonly TOKEN_URL;
48
48
  private static readonly USER_URL;
@@ -1 +1 @@
1
- {"version":3,"file":"GitHubAuthManager.d.ts","sourceRoot":"","sources":["../../src/auth/GitHubAuthManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAEnE;;;;;OAKG;mBACkB,WAAW;IA4BhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0C;IACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAGjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAgC;gBAEzC,QAAQ,EAAE,QAAQ;IAI9B;;OAEG;YACW,cAAc;IA2C5B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA8B1C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA4DvD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAgD,GAAG,OAAO,CAAC,aAAa,CAAC;IAkF1H;;OAEG;IACG,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B/E;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC1C;;OAEG;YACW,UAAU;IAYxB;;OAEG;YACW,aAAa;IA6E3B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM;IAmBlE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;CAyBjC"}
1
+ {"version":3,"file":"GitHubAuthManager.d.ts","sourceRoot":"","sources":["../../src/auth/GitHubAuthManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAEnE;;;;;OAKG;WACiB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0C;IACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAGjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAgC;gBAEzC,QAAQ,EAAE,QAAQ;IAI9B;;OAEG;YACW,cAAc;IA2C5B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA8B1C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAkIvD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAgD,GAAG,OAAO,CAAC,aAAa,CAAC;IAkF1H;;OAEG;IACG,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B/E;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC1C;;OAEG;YACW,UAAU;IAYxB;;OAEG;YACW,aAAa;IA6E3B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM;IAmBlE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;CAyBjC"}
@@ -21,7 +21,7 @@ export class GitHubAuthManager {
21
21
  * This Client ID enables the GitHub device flow authentication
22
22
  * allowing users to authenticate with an 8-character code.
23
23
  */
24
- static DEFAULT_CLIENT_ID = 'Ov23liXGGP9jNrBhBNfO';
24
+ static DEFAULT_CLIENT_ID = 'Ov23li9gyNZP6m9aJ2EP';
25
25
  /**
26
26
  * Get the CLIENT_ID from environment variable, ConfigManager, or default
27
27
  * Priority: Environment variable > ConfigManager > Default Client ID
@@ -136,6 +136,12 @@ export class GitHubAuthManager {
136
136
  async initiateDeviceFlow() {
137
137
  const clientId = await GitHubAuthManager.getClientId();
138
138
  // getClientId() always returns a value (env, config, or default)
139
+ // Log the OAuth flow step for debugging
140
+ logger.debug('OAUTH_STEP_1: Getting client ID', { clientId: clientId?.substring(0, 8) + '...' });
141
+ if (!clientId) {
142
+ throw new Error('OAUTH_NO_CLIENT_ID: No OAuth client ID configured. Set DOLLHOUSE_GITHUB_CLIENT_ID environment variable.');
143
+ }
144
+ logger.debug('OAUTH_STEP_2: Initiating device flow', { url: GitHubAuthManager.DEVICE_CODE_URL });
139
145
  try {
140
146
  const response = await this.fetchWithRetry(GitHubAuthManager.DEVICE_CODE_URL, {
141
147
  method: 'POST',
@@ -148,19 +154,58 @@ export class GitHubAuthManager {
148
154
  scope: 'public_repo read:user'
149
155
  })
150
156
  });
157
+ logger.debug('OAUTH_STEP_3: GitHub response', {
158
+ status: response.status,
159
+ statusText: response.statusText,
160
+ headers: {
161
+ 'x-github-request-id': response.headers.get('x-github-request-id'),
162
+ 'x-ratelimit-remaining': response.headers.get('x-ratelimit-remaining')
163
+ }
164
+ });
151
165
  if (!response.ok) {
152
- // Provide user-friendly error messages based on status codes
153
- const errorMessage = this.getErrorMessageForStatus(response.status, 'device flow initialization');
154
- logger.debug('Device flow initiation failed', {
166
+ const responseText = await response.text();
167
+ logger.error('GitHub OAuth endpoint error', {
155
168
  status: response.status,
156
- statusText: response.statusText
169
+ statusText: response.statusText,
170
+ responseBody: responseText,
171
+ clientId: clientId?.substring(0, 8) + '...'
157
172
  });
158
- throw new Error(errorMessage);
173
+ // Parse GitHub's error response for specific error codes
174
+ try {
175
+ const errorData = JSON.parse(responseText);
176
+ if (errorData.error === 'unauthorized_client') {
177
+ throw new Error(`OAUTH_CLIENT_UNAUTHORIZED: OAuth app '${clientId?.substring(0, 8)}...' is not authorized for device flow. The app may need reconfiguration.`);
178
+ }
179
+ if (errorData.error === 'invalid_client') {
180
+ throw new Error(`OAUTH_CLIENT_INVALID: GitHub rejected OAuth client ID '${clientId?.substring(0, 8)}...'. The app may not exist or be disabled.`);
181
+ }
182
+ if (errorData.error_description) {
183
+ throw new Error(`OAUTH_API_ERROR: ${errorData.error_description}`);
184
+ }
185
+ }
186
+ catch (parseError) {
187
+ // If we can't parse the error, provide HTTP status specific error
188
+ if (response.status === 401) {
189
+ throw new Error(`OAUTH_CLIENT_INVALID: GitHub rejected OAuth client ID '${clientId?.substring(0, 8)}...'. The app may not exist or be disabled.`);
190
+ }
191
+ if (response.status === 403) {
192
+ throw new Error(`OAUTH_DEVICE_FLOW_DISABLED: This OAuth app doesn't have device flow enabled. Contact administrator.`);
193
+ }
194
+ if (response.status === 429) {
195
+ throw new Error(`OAUTH_RATE_LIMITED: Too many authentication attempts. Please wait before trying again.`);
196
+ }
197
+ throw new Error(`OAUTH_HTTP_${response.status}: GitHub OAuth failed - ${response.statusText}`);
198
+ }
159
199
  }
160
200
  const data = await response.json();
161
201
  // Validate response
162
202
  if (!data.device_code || !data.user_code || !data.verification_uri) {
163
- throw new Error('Invalid device flow response from GitHub');
203
+ logger.error('Invalid device flow response structure', {
204
+ hasDeviceCode: !!data.device_code,
205
+ hasUserCode: !!data.user_code,
206
+ hasVerificationUri: !!data.verification_uri
207
+ });
208
+ throw new Error('OAUTH_INVALID_RESPONSE: Invalid device flow response from GitHub - missing required fields');
164
209
  }
165
210
  // Log security event for audit trail
166
211
  SecurityMonitor.logSecurityEvent({
@@ -178,11 +223,24 @@ export class GitHubAuthManager {
178
223
  }
179
224
  catch (error) {
180
225
  ErrorHandler.logError('GitHubAuthManager.initiateDeviceFlow', error);
181
- // Re-throw if it's already a properly formatted error
182
- if (error instanceof Error && error.message.includes('GitHub OAuth')) {
183
- throw error;
226
+ // Check if it's a network error
227
+ if (error instanceof Error) {
228
+ // Re-throw if it's already a properly formatted error with code
229
+ if (error.message.startsWith('OAUTH_')) {
230
+ throw error;
231
+ }
232
+ // Format network errors
233
+ if (error.message.includes('ECONNREFUSED') ||
234
+ error.message.includes('ETIMEDOUT') ||
235
+ error.message.includes('ENOTFOUND')) {
236
+ throw new Error(`OAUTH_NETWORK_ERROR: Unable to reach GitHub servers (https://github.com/login/device/code). Check your internet connection.`);
237
+ }
238
+ if (error.message.includes('network')) {
239
+ throw new Error(`OAUTH_NETWORK_ERROR: Network error while connecting to GitHub. Please check your internet connection.`);
240
+ }
184
241
  }
185
- throw new Error('Failed to start GitHub authentication. Please check your internet connection.');
242
+ // Generic fallback (should rarely happen)
243
+ throw new Error(`OAUTH_UNKNOWN_ERROR: Failed to start GitHub authentication - ${error instanceof Error ? error.message : 'Unknown error'}`);
186
244
  }
187
245
  }
188
246
  /**
@@ -504,4 +562,4 @@ Don't have a GitHub account? You'll be prompted to create one (it's free!)
504
562
  }
505
563
  }
506
564
  }
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQXV0aE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9HaXRIdWJBdXRoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQXdCM0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFVLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0lBRW5FOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXO1FBQzlCLGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1FBQzNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELElBQUksY0FBYyxFQUFFLENBQUM7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ZXIgdXNpbmcgT0F1dGggZGV2aWNlIGZsb3dcbiAqIEhhbmRsZXMgYXV0aGVudGljYXRpb24gZm9yIE1DUCBzZXJ2ZXJzIHdpdGhvdXQgcmVxdWlyaW5nIGNsaWVudCBzZWNyZXRzXG4gKi9cblxuaW1wb3J0IHsgVG9rZW5NYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSB9IGZyb20gJy4uL2NhY2hlL0FQSUNhY2hlLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvZGVSZXNwb25zZSB7XG4gIGRldmljZV9jb2RlOiBzdHJpbmc7XG4gIHVzZXJfY29kZTogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpOiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIHRva2VuX3R5cGU6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoU3RhdHVzIHtcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICBoYXNUb2tlbjogYm9vbGVhbjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICBleHBpcmVzQXQ/OiBEYXRlO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgR2l0SHViIGF1dGhlbnRpY2F0aW9uIHVzaW5nIHRoZSBPQXV0aCBkZXZpY2UgZmxvd1xuICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggZm9yIENMSS9kZXNrdG9wIGFwcGxpY2F0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgR2l0SHViQXV0aE1hbmFnZXIge1xuICAvKipcbiAgICogRG9sbGhvdXNlTUNQJ3Mgb2ZmaWNpYWwgT0F1dGggQXBwIENsaWVudCBJRFxuICAgKiBUaGlzIGlzIFBVQkxJQyBpbmZvcm1hdGlvbiAtIE9BdXRoIENsaWVudCBJRHMgYXJlIG1lYW50IHRvIGJlIHZpc2libGUuXG4gICAqIE9ubHkgQ2xpZW50IFNlY3JldHMgYXJlIHByaXZhdGUgKGRldmljZSBmbG93IGRvZXNuJ3QgdXNlIHNlY3JldHMpLlxuICAgKiBcbiAgICogVGhpcyBDbGllbnQgSUQgZW5hYmxlcyB0aGUgR2l0SHViIGRldmljZSBmbG93IGF1dGhlbnRpY2F0aW9uXG4gICAqIGFsbG93aW5nIHVzZXJzIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGFuIDgtY2hhcmFjdGVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NMSUVOVF9JRCA9ICdPdjIzbGlYR0dQOWpOckJoQk5mTyc7XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBDTElFTlRfSUQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgQ29uZmlnTWFuYWdlciwgb3IgZGVmYXVsdFxuICAgKiBQcmlvcml0eTogRW52aXJvbm1lbnQgdmFyaWFibGUgPiBDb25maWdNYW5hZ2VyID4gRGVmYXVsdCBDbGllbnQgSURcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBPQXV0aCBDbGllbnQgSUQgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0Q2xpZW50SWQoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3QgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgIGNvbnN0IGVudkNsaWVudElkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQ7XG4gICAgaWYgKGVudkNsaWVudElkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIE9BdXRoIENsaWVudCBJRCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlJyk7XG4gICAgICByZXR1cm4gZW52Q2xpZW50SWQ7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ29uZmlnTWFuYWdlciBmb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIubG9hZENvbmZpZygpO1xuICAgICAgY29uc3QgY29uZmlnQ2xpZW50SWQgPSBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgICBpZiAoY29uZmlnQ2xpZW50SWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBPQXV0aCBDbGllbnQgSUQgZnJvbSBjb25maWcnKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ0NsaWVudElkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIE9BdXRoIENsaWVudCBJRCBpbiBjb25maWcnLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgZGVmYXVsdCBEb2xsaG91c2VNQ1AgT0F1dGggQXBwIENsaWVudCBJRFxuICAgIC8vIFRoaXMgZW5hYmxlcyBcImp1c3Qgd29ya3NcIiBleHBlcmllbmNlIGZvciBOUE0gaW5zdGFsbHNcbiAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGRlZmF1bHQgRG9sbGhvdXNlTUNQIE9BdXRoIENsaWVudCBJRCcpO1xuICAgIHJldHVybiBHaXRIdWJBdXRoTWFuYWdlci5ERUZBVUxUX0NMSUVOVF9JRDtcbiAgfVxuICBcbiAgLy8gR2l0SHViIE9BdXRoIGVuZHBvaW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERVZJQ0VfQ09ERV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZS9jb2RlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aC9hY2Nlc3NfdG9rZW4nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVU0VSX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3VzZXInO1xuICBcbiAgLy8gUG9sbGluZyBjb25maWd1cmF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUE9MTF9JTlRFUlZBTCA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfUE9MTF9BVFRFTVBUUyA9IDE4MDsgLy8gMTUgbWludXRlcyB0b3RhbFxuICBcbiAgcHJpdmF0ZSBhcGlDYWNoZTogQVBJQ2FjaGU7XG4gIHByaXZhdGUgYWN0aXZlUG9sbGluZzogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG4gIFxuICBjb25zdHJ1Y3RvcihhcGlDYWNoZTogQVBJQ2FjaGUpIHtcbiAgICB0aGlzLmFwaUNhY2hlID0gYXBpQ2FjaGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgbmV0d29yayByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXaXRoUmV0cnkoXG4gICAgdXJsOiBzdHJpbmcsIFxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0LCBcbiAgICBtYXhSZXRyaWVzOiBudW1iZXIgPSAzLFxuICAgIHJldHJ5RGVsYXk6IG51bWJlciA9IDEwMDBcbiAgKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmZldGNoV2l0aFJldHJ5JywgZXJyb3IsIHsgdXJsLCBhdHRlbXB0IH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3IgdGhhdCBzaG91bGQgYmUgcmV0cmllZFxuICAgICAgICBjb25zdCBpc05ldHdvcmtFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgKFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VDT05OUkVGVVNFRCcpIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRVRJTUVET1VUJykgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9URk9VTkQnKSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25ldHdvcmsnKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzTmV0d29ya0Vycm9yICYmIGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR3b3JrIHJlcXVlc3QgZmFpbGVkLCByZXRyeWluZyAoJHthdHRlbXB0fS8ke21heFJldHJpZXN9KWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgbmV4dFJldHJ5SW46IHJldHJ5RGVsYXkgKiBhdHRlbXB0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeURlbGF5ICogYXR0ZW1wdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vdCBhIG5ldHdvcmsgZXJyb3Igb3IgbGFzdCBhdHRlbXB0LCB0aHJvdyBpbW1lZGlhdGVseVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgYWxsIHJldHJpZXMnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc3RhdHVzXG4gICAqL1xuICBhc3luYyBnZXRBdXRoU3RhdHVzKCk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNUb2tlbjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHVzZXIgaW5mbyB0byB2YWxpZGF0ZSB0b2tlblxuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW4pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICAgIGhhc1Rva2VuOiB0cnVlLFxuICAgICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICAgIHNjb3BlczogdXNlckluZm8uc2NvcGVzXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUb2tlbiBtaWdodCBiZSBpbnZhbGlkIG9yIGV4cGlyZWRcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuY2hlY2tBdXRoU3RhdHVzJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgaGFzVG9rZW46IHRydWUgLy8gSGFzIHRva2VuIGJ1dCBpdCdzIGludmFsaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhdGUgdGhlIGRldmljZSBmbG93IGF1dGhlbnRpY2F0aW9uIHByb2Nlc3NcbiAgICovXG4gIGFzeW5jIGluaXRpYXRlRGV2aWNlRmxvdygpOiBQcm9taXNlPERldmljZUNvZGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAvLyBnZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIGEgdmFsdWUgKGVudiwgY29uZmlnLCBvciBkZWZhdWx0KVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoR2l0SHViQXV0aE1hbmFnZXIuREVWSUNFX0NPREVfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLFxuICAgICAgICAgIHNjb3BlOiAncHVibGljX3JlcG8gcmVhZDp1c2VyJ1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgLy8gUHJvdmlkZSB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzIGJhc2VkIG9uIHN0YXR1cyBjb2Rlc1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZUZvclN0YXR1cyhyZXNwb25zZS5zdGF0dXMsICdkZXZpY2UgZmxvdyBpbml0aWFsaXphdGlvbicpO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0RldmljZSBmbG93IGluaXRpYXRpb24gZmFpbGVkJywgeyBcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCBcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSByZXNwb25zZVxuICAgICAgaWYgKCFkYXRhLmRldmljZV9jb2RlIHx8ICFkYXRhLnVzZXJfY29kZSB8fCAhZGF0YS52ZXJpZmljYXRpb25fdXJpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXZpY2UgZmxvdyByZXNwb25zZSBmcm9tIEdpdEh1YicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmluaXRpYXRlRGV2aWNlRmxvdycsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgT0F1dGggZGV2aWNlIGZsb3cgaW5pdGlhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlckNvZGU6IGRhdGEudXNlcl9jb2RlLFxuICAgICAgICAgIGV4cGlyZXNJbjogZGF0YS5leHBpcmVzX2luLFxuICAgICAgICAgIGludGVydmFsOiBkYXRhLmludGVydmFsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4gZGF0YSBhcyBEZXZpY2VDb2RlUmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93JywgZXJyb3IpO1xuICAgICAgXG4gICAgICAvLyBSZS10aHJvdyBpZiBpdCdzIGFscmVhZHkgYSBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3JcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0dpdEh1YiBPQXV0aCcpKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBHaXRIdWIgYXV0aGVudGljYXRpb24uIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUG9sbCBmb3IgdG9rZW4gYWZ0ZXIgdXNlciBoYXMgYXV0aG9yaXplZCB0aGUgZGV2aWNlXG4gICAqL1xuICBhc3luYyBwb2xsRm9yVG9rZW4oZGV2aWNlQ29kZTogc3RyaW5nLCBpbnRlcnZhbDogbnVtYmVyID0gR2l0SHViQXV0aE1hbmFnZXIuREVGQVVMVF9QT0xMX0lOVEVSVkFMKTogUHJvbWlzZTxUb2tlblJlc3BvbnNlPiB7XG4gICAgLy8gQ3JlYXRlIG5ldyBhYm9ydCBjb250cm9sbGVyIGZvciB0aGlzIHBvbGxpbmcgc2Vzc2lvblxuICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmFjdGl2ZVBvbGxpbmcuc2lnbmFsO1xuICAgIFxuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlIChhdHRlbXB0cyA8IEdpdEh1YkF1dGhNYW5hZ2VyLk1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBvbGxpbmcgd2FzIGFib3J0ZWRcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBwb2xsaW5nIHdhcyBjYW5jZWxsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR2l0SHViQXV0aE1hbmFnZXIuVE9LRU5fVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNsaWVudF9pZDogYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKSB8fCAnJyxcbiAgICAgICAgICAgIGRldmljZV9jb2RlOiBkZXZpY2VDb2RlLFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciB2YXJpb3VzIHJlc3BvbnNlIHN0YXRlc1xuICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJzpcbiAgICAgICAgICAgICAgLy8gVXNlciBoYXNuJ3QgYXV0aG9yaXplZCB5ZXQsIGtlZXAgcG9sbGluZ1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdzbG93X2Rvd24nOlxuICAgICAgICAgICAgICAvLyBJbmNyZWFzZSBwb2xsaW5nIGludGVydmFsXG4gICAgICAgICAgICAgIGludGVydmFsID0gTWF0aC5taW4oaW50ZXJ2YWwgKiAxLjUsIDMwMDAwKTsgLy8gTWF4IDMwIHNlY29uZHNcbiAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTbG93aW5nIGRvd24gcG9sbGluZyBpbnRlcnZhbCcsIHsgbmV3SW50ZXJ2YWw6IGludGVydmFsIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdleHBpcmVkX3Rva2VuJzpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXV0aG9yaXphdGlvbiBjb2RlIGhhcyBleHBpcmVkLiBQbGVhc2Ugc3RhcnQgb3Zlci4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdhY2Nlc3NfZGVuaWVkJzpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIHdhcyBkZW5pZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gTG9nIHRoZSBhY3R1YWwgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ09BdXRoIGRldmljZSBmbG93IGVycm9yJywgeyBcbiAgICAgICAgICAgICAgICBlcnJvcjogZGF0YS5lcnJvciwgXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZXJyb3JfZGVzY3JpcHRpb24gXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHRyeSBzdGFydGluZyB0aGUgcHJvY2VzcyBhZ2Fpbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAvLyBTdWNjZXNzIVxuICAgICAgICAgIHJldHVybiBkYXRhIGFzIFRva2VuUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFdhaXQgYmVmb3JlIG5leHQgcG9sbFxuICAgICAgICAvLyBXYWl0IGZvciBpbnRlcnZhbCB3aXRoIGFib3J0IHN1cHBvcnRcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2l0aEFib3J0KGludGVydmFsLCBzaWduYWwpO1xuICAgICAgICBcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldHdvcmsgZXJyb3JzIHNob3VsZG4ndCBzdG9wIHBvbGxpbmdcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5wb2xsRm9yVG9rZW4nLCBlcnJvciwgeyBhdHRlbXB0OiBhdHRlbXB0cyB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2l0aEFib3J0KGludGVydmFsLCBzaWduYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHRpbWVkIG91dC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYXIgYWN0aXZlIHBvbGxpbmcgcmVmZXJlbmNlXG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcgPSBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93IGFuZCBzdG9yZSB0aGUgdG9rZW5cbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlQXV0aGVudGljYXRpb24odG9rZW5SZXNwb25zZTogVG9rZW5SZXNwb25zZSk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIC8vIFN0b3JlIHRva2VuIHNlY3VyZWx5XG4gICAgYXdhaXQgdGhpcy5zdG9yZVRva2VuKHRva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKTtcbiAgICBcbiAgICAvLyBHZXQgdXNlciBpbmZvXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xuICAgIFxuICAgIC8vIExvZyBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIGNvbXBsZXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNvbXBsZXRlQXV0aGVudGljYXRpb24nLFxuICAgICAgZGV0YWlsczogJ0dpdEh1YiBPQXV0aCBkZXZpY2UgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgICAgc2NvcGVzOiB0b2tlblJlc3BvbnNlLnNjb3BlLnNwbGl0KCcgJyksXG4gICAgICAgIHRva2VuVHlwZTogVG9rZW5NYW5hZ2VyLmdldFRva2VuVHlwZSh0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgaGFzVG9rZW46IHRydWUsXG4gICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICBzY29wZXM6IHRva2VuUmVzcG9uc2Uuc2NvcGUuc3BsaXQoJyAnKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBzdG9yZWQgYXV0aGVudGljYXRpb24gYW5kIHJldm9rZSB0b2tlblxuICAgKi9cbiAgYXN5bmMgY2xlYXJBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSB0b2tlbiBiZWZvcmUgY2xlYXJpbmcgaXRcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICAgIFxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gcmV2b2tlIHRoZSB0b2tlbiBvbiBHaXRIdWJcbiAgICAgICAgLy8gTm90ZTogR2l0SHViIE9BdXRoIHRva2VucyBkb24ndCBoYXZlIGEgcmV2b2NhdGlvbiBlbmRwb2ludCBmb3IgZGV2aWNlIGZsb3cgdG9rZW5zXG4gICAgICAgIC8vIEJ1dCB3ZSdsbCBjbGVhciB0aGUgY2FjaGUgYW5kIHJlbW92ZSBmcm9tIHN0b3JhZ2VcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFyIGNhY2hlZCB1c2VyIGluZm9cbiAgICAgICAgdGhpcy5hcGlDYWNoZS5jbGVhcigpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5jbGVhckF1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGNsZWFyZWQgYnkgdXNlciByZXF1ZXN0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgaGFkVG9rZW46IHRydWUsXG4gICAgICAgICAgICB0b2tlblByZWZpeDogVG9rZW5NYW5hZ2VyLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIHNlY3VyZSBzdG9yYWdlXG4gICAgICBhd2FpdCBUb2tlbk1hbmFnZXIucmVtb3ZlU3RvcmVkVG9rZW4oKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBjbGVhcmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24nLCBlcnJvcik7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoJ0ZhaWxlZCB0byBjbGVhciBhdXRoZW50aWNhdGlvbicsIEVycm9yQ2F0ZWdvcnkuQVVUSF9FUlJPUiwgdW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3RvcmUgdG9rZW4gc2VjdXJlbHkgdXNpbmcgZW5jcnlwdGVkIGZpbGUgc3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgVG9rZW5NYW5hZ2VyLnN0b3JlR2l0SHViVG9rZW4odG9rZW4pO1xuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHkuIFlvdSBhcmUgbm93IGF1dGhlbnRpY2F0ZWQhJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuc3RvcmVUb2tlbicsIGVycm9yKTtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGVudmlyb25tZW50IHZhcmlhYmxlIGluc3RydWN0aW9uc1xuICAgICAgbG9nZ2VyLmluZm8oJ0ZvciBtYW51YWwgc2V0dXAsIHlvdSBjYW4gc2V0IEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gc3RvcmUgR2l0SHViIHRva2VuJywgRXJyb3JDYXRlZ29yeS5BVVRIX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCB1c2VyIGluZm9ybWF0aW9uIGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoVXNlckluZm8odG9rZW46IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmFwaUNhY2hlLmdldChHaXRIdWJBdXRoTWFuYWdlci5VU0VSX1VSTCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KEdpdEh1YkF1dGhNYW5hZ2VyLlVTRVJfVVJMLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHJlc3BvbnNlLnN0YXR1cywgJ3VzZXIgaW5mb3JtYXRpb24gZmV0Y2gnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGZldGNoIHVzZXIgaW5mbycsIHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdXNlcm5hbWUgYW5kIG90aGVyIHRleHQgZmllbGRzIHRvIHByZXZlbnQgVW5pY29kZSBhdHRhY2tzXG4gICAgaWYgKGRhdGEubG9naW4pIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLmxvZ2luKTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuZmV0Y2hVc2VySW5mbycsXG4gICAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB1c2VybmFtZSBjb250YWlucyBpbnZhbGlkIFVuaWNvZGUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGg6IGRhdGEubG9naW4ubGVuZ3RoLFxuICAgICAgICAgICAgZGV0ZWN0ZWRJc3N1ZXM6IHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXJuYW1lIGZvcm1hdCBmcm9tIEdpdEh1YicpO1xuICAgICAgfVxuICAgICAgZGF0YS5sb2dpbiA9IHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgfVxuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSBkaXNwbGF5IG5hbWUgaWYgcHJlc2VudFxuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWVWYWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5uYW1lKTtcbiAgICAgIGlmIChuYW1lVmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIGRhdGEubmFtZSA9IG5hbWVWYWxpZGF0aW9uLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBvbiBkaXNwbGF5IG5hbWUsIGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgIGRlbGV0ZSBkYXRhLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBzY29wZXMgZnJvbSByZXNwb25zZSBoZWFkZXJzXG4gICAgY29uc3Qgc2NvcGVIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1vYXV0aC1zY29wZXMnKTtcbiAgICBpZiAoc2NvcGVIZWFkZXIpIHtcbiAgICAgIGRhdGEuc2NvcGVzID0gc2NvcGVIZWFkZXIuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIExvZyBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuZmV0Y2hVc2VySW5mbycsXG4gICAgICBkZXRhaWxzOiAnR2l0SHViIHVzZXIgYXV0aGVudGljYXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcm5hbWU6IGRhdGEubG9naW4sXG4gICAgICAgIGhhc0VtYWlsOiAhIWRhdGEuZW1haWwsXG4gICAgICAgIHNjb3BlczogZGF0YS5zY29wZXMgfHwgW11cbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBDYWNoZSB0aGUgcmVzdWx0XG4gICAgdGhpcy5hcGlDYWNoZS5zZXQoR2l0SHViQXV0aE1hbmFnZXIuVVNFUl9VUkwsIGRhdGEpO1xuICAgIFxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGF1dGhlbnRpY2F0aW9uIGluc3RydWN0aW9ucyBmb3IgdXNlcnNcbiAgICovXG4gIGZvcm1hdEF1dGhJbnN0cnVjdGlvbnMoZGV2aWNlUmVzcG9uc2U6IERldmljZUNvZGVSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGDwn5SQICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcblxuVG8gYWNjZXNzIGFsbCBEb2xsaG91c2VNQ1AgZmVhdHVyZXMsIHBsZWFzZSBhdXRoZW50aWNhdGUgd2l0aCBHaXRIdWI6XG5cbjEuIFZpc2l0OiAqKiR7ZGV2aWNlUmVzcG9uc2UudmVyaWZpY2F0aW9uX3VyaX0qKlxuMi4gRW50ZXIgY29kZTogKioke2RldmljZVJlc3BvbnNlLnVzZXJfY29kZX0qKlxuMy4gQXV0aG9yaXplICdEb2xsaG91c2VNQ1AgQ29sbGVjdGlvbidcblxuVGhpcyB3aWxsIGdyYW50IGFjY2VzcyB0bzpcbuKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXG7inIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudCAgXG7inIUgU3VibWl0IHlvdXIgb3duIGNyZWF0aW9uc1xuXG5Eb24ndCBoYXZlIGEgR2l0SHViIGFjY291bnQ/IFlvdSdsbCBiZSBwcm9tcHRlZCB0byBjcmVhdGUgb25lIChpdCdzIGZyZWUhKVxuXG7ij7HvuI8gVGhpcyBjb2RlIGV4cGlyZXMgaW4gJHtNYXRoLmZsb29yKGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4gLyA2MCl9IG1pbnV0ZXMuYDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgbmVlZHMgdG8gYXV0aGVudGljYXRlIGZvciBhIHNwZWNpZmljIGFjdGlvblxuICAgKi9cbiAgbmVlZHNBdXRoRm9yQWN0aW9uKGFjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXV0aFJlcXVpcmVkQWN0aW9ucyA9IFsnc3VibWl0JywgJ2NyZWF0ZV9wcicsICdtYW5hZ2VfY29udGVudCddO1xuICAgIHJldHVybiBhdXRoUmVxdWlyZWRBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbi50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFdhaXQgd2l0aCBhYm9ydCBzaWduYWwgc3VwcG9ydFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0V2l0aEFib3J0KG1zOiBudW1iZXIsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICAgICAgXG4gICAgICAvLyBMaXN0ZW4gZm9yIGFib3J0IHNpZ25hbFxuICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1dhaXQgYWJvcnRlZCcpKTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0SGFuZGxlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBDbGVhbiB1cCBhZnRlciB0aW1lb3V0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFuIHVwIGFueSBhY3RpdmUgb3BlcmF0aW9ucyAoY2FsbGVkIG9uIHNlcnZlciBzaHV0ZG93bilcbiAgICovXG4gIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQWJvcnQgYW55IGFjdGl2ZSBwb2xsaW5nXG4gICAgaWYgKHRoaXMuYWN0aXZlUG9sbGluZykge1xuICAgICAgdGhpcy5hY3RpdmVQb2xsaW5nLmFib3J0KCk7XG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcgPSBudWxsO1xuICAgICAgXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9DQUNIRV9DTEVBUkVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5jbGVhbnVwJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiBhdXRoIG1hbmFnZXIgY2xlYW5lZCB1cCBvbiBzaHV0ZG93bicsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgaGFkQWN0aXZlUG9sbGluZzogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBwb2xsaW5nIGNhbmNlbGxlZCBkdWUgdG8gc2h1dGRvd24nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYXIgQVBJIGNhY2hlXG4gICAgdGhpcy5hcGlDYWNoZS5jbGVhcigpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBIVFRQIHN0YXR1cyBjb2RlXG4gICAqIEF2b2lkcyBleHBvc2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gd2hpbGUgcHJvdmlkaW5nIGhlbHBmdWwgZ3VpZGFuY2VcbiAgICovXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHN0YXR1czogbnVtYmVyLCBvcGVyYXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgNDAwOlxuICAgICAgICByZXR1cm4gYEludmFsaWQgcmVxdWVzdCB0byBHaXRIdWIuIFBsZWFzZSBlbnN1cmUgdGhlIE9BdXRoIGFwcCBpcyBwcm9wZXJseSBjb25maWd1cmVkLmA7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgT0F1dGggaXMgbm90IGNvbmZpZ3VyZWQuIFBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyL2lzc3Vlc2A7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuIGBBY2Nlc3MgZGVuaWVkIGJ5IEdpdEh1Yi4gVGhlIE9BdXRoIGFwcCBtYXkgbGFjayByZXF1aXJlZCBwZXJtaXNzaW9ucy5gO1xuICAgICAgY2FzZSA0MDQ6XG4gICAgICAgIHJldHVybiBgR2l0SHViIHNlcnZpY2Ugbm90IGZvdW5kLiBUaGlzIG1heSBpbmRpY2F0ZSBhbiBBUEkgY2hhbmdlLmA7XG4gICAgICBjYXNlIDQyMjpcbiAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHBhcmFtZXRlcnMgc2VudCB0byBHaXRIdWIuIFBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uYDtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICByZXR1cm4gYFRvbyBtYW55IHJlcXVlc3RzIHRvIEdpdEh1Yi4gUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gO1xuICAgICAgY2FzZSA1MDA6XG4gICAgICBjYXNlIDUwMjpcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiBgR2l0SHViIHNlcnZpY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbW9tZW50cy5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gTG9nIHRoZSBhY3R1YWwgc3RhdHVzIGZvciBkZWJ1Z2dpbmcsIGJ1dCBkb24ndCBleHBvc2UgaXQgdG8gdXNlcnNcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlIGR1cmluZyAke29wZXJhdGlvbn1gLCB7IHN0YXR1cyB9KTtcbiAgICAgICAgcmV0dXJuIGBGYWlsZWQgdG8gY29tcGxldGUgJHtvcGVyYXRpb259LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYDtcbiAgICB9XG4gIH1cbn0iXX0=
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQXV0aE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9HaXRIdWJBdXRoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQXdCM0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFVLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0lBRW5FOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXO1FBQzdCLGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1FBQzNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELElBQUksY0FBYyxFQUFFLENBQUM7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WUFDakYsS0FBSyxHQUFHO2dCQUNOLE9BQU8sNERBQTRELENBQUM7WUFDdEUsS0FBSyxHQUFHO2dCQUNOLE9BQU8scUVBQXFFLENBQUM7WUFDL0UsS0FBSyxHQUFHO2dCQUNOLE9BQU8sa0VBQWtFLENBQUM7WUFDNUUsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHO2dCQUNOLE9BQU8sNEVBQTRFLENBQUM7WUFDdEY7Z0JBQ0Usb0VBQW9FO2dCQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU8sc0JBQXNCLFNBQVMsd0RBQXdELENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdEh1YiBhdXRoZW50aWNhdGlvbiBtYW5hZ2VyIHVzaW5nIE9BdXRoIGRldmljZSBmbG93XG4gKiBIYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGZvciBNQ1Agc2VydmVycyB3aXRob3V0IHJlcXVpcmluZyBjbGllbnQgc2VjcmV0c1xuICovXG5cbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUgfSBmcm9tICcuLi9jYWNoZS9BUElDYWNoZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gJy4uL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VDb2RlUmVzcG9uc2Uge1xuICBkZXZpY2VfY29kZTogc3RyaW5nO1xuICB1c2VyX2NvZGU6IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaTogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG4gIGludGVydmFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXNwb25zZSB7XG4gIGFjY2Vzc190b2tlbjogc3RyaW5nO1xuICB0b2tlbl90eXBlOiBzdHJpbmc7XG4gIHNjb3BlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN0YXR1cyB7XG4gIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgaGFzVG9rZW46IGJvb2xlYW47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICBzY29wZXM/OiBzdHJpbmdbXTtcbiAgZXhwaXJlc0F0PzogRGF0ZTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIEdpdEh1YiBhdXRoZW50aWNhdGlvbiB1c2luZyB0aGUgT0F1dGggZGV2aWNlIGZsb3dcbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIGZvciBDTEkvZGVza3RvcCBhcHBsaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YkF1dGhNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIERvbGxob3VzZU1DUCdzIG9mZmljaWFsIE9BdXRoIEFwcCBDbGllbnQgSURcbiAgICogVGhpcyBpcyBQVUJMSUMgaW5mb3JtYXRpb24gLSBPQXV0aCBDbGllbnQgSURzIGFyZSBtZWFudCB0byBiZSB2aXNpYmxlLlxuICAgKiBPbmx5IENsaWVudCBTZWNyZXRzIGFyZSBwcml2YXRlIChkZXZpY2UgZmxvdyBkb2Vzbid0IHVzZSBzZWNyZXRzKS5cbiAgICogXG4gICAqIFRoaXMgQ2xpZW50IElEIGVuYWJsZXMgdGhlIEdpdEh1YiBkZXZpY2UgZmxvdyBhdXRoZW50aWNhdGlvblxuICAgKiBhbGxvd2luZyB1c2VycyB0byBhdXRoZW50aWNhdGUgd2l0aCBhbiA4LWNoYXJhY3RlciBjb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9DTElFTlRfSUQgPSAnT3YyM2xpOWd5TlpQNm05YUoyRVAnO1xuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgQ0xJRU5UX0lEIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUsIENvbmZpZ01hbmFnZXIsIG9yIGRlZmF1bHRcbiAgICogUHJpb3JpdHk6IEVudmlyb25tZW50IHZhcmlhYmxlID4gQ29uZmlnTWFuYWdlciA+IERlZmF1bHQgQ2xpZW50IElEXG4gICAqIFxuICAgKiBAcmV0dXJucyBUaGUgT0F1dGggQ2xpZW50IElEIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2V0Q2xpZW50SWQoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3QgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgIGNvbnN0IGVudkNsaWVudElkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQ7XG4gICAgaWYgKGVudkNsaWVudElkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIE9BdXRoIENsaWVudCBJRCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlJyk7XG4gICAgICByZXR1cm4gZW52Q2xpZW50SWQ7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ29uZmlnTWFuYWdlciBmb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIubG9hZENvbmZpZygpO1xuICAgICAgY29uc3QgY29uZmlnQ2xpZW50SWQgPSBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgICBpZiAoY29uZmlnQ2xpZW50SWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBPQXV0aCBDbGllbnQgSUQgZnJvbSBjb25maWcnKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ0NsaWVudElkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIE9BdXRoIENsaWVudCBJRCBpbiBjb25maWcnLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgZGVmYXVsdCBEb2xsaG91c2VNQ1AgT0F1dGggQXBwIENsaWVudCBJRFxuICAgIC8vIFRoaXMgZW5hYmxlcyBcImp1c3Qgd29ya3NcIiBleHBlcmllbmNlIGZvciBOUE0gaW5zdGFsbHNcbiAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGRlZmF1bHQgRG9sbGhvdXNlTUNQIE9BdXRoIENsaWVudCBJRCcpO1xuICAgIHJldHVybiBHaXRIdWJBdXRoTWFuYWdlci5ERUZBVUxUX0NMSUVOVF9JRDtcbiAgfVxuICBcbiAgLy8gR2l0SHViIE9BdXRoIGVuZHBvaW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERVZJQ0VfQ09ERV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZS9jb2RlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aC9hY2Nlc3NfdG9rZW4nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVU0VSX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3VzZXInO1xuICBcbiAgLy8gUG9sbGluZyBjb25maWd1cmF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUE9MTF9JTlRFUlZBTCA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfUE9MTF9BVFRFTVBUUyA9IDE4MDsgLy8gMTUgbWludXRlcyB0b3RhbFxuICBcbiAgcHJpdmF0ZSBhcGlDYWNoZTogQVBJQ2FjaGU7XG4gIHByaXZhdGUgYWN0aXZlUG9sbGluZzogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG4gIFxuICBjb25zdHJ1Y3RvcihhcGlDYWNoZTogQVBJQ2FjaGUpIHtcbiAgICB0aGlzLmFwaUNhY2hlID0gYXBpQ2FjaGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgbmV0d29yayByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXaXRoUmV0cnkoXG4gICAgdXJsOiBzdHJpbmcsIFxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0LCBcbiAgICBtYXhSZXRyaWVzOiBudW1iZXIgPSAzLFxuICAgIHJldHJ5RGVsYXk6IG51bWJlciA9IDEwMDBcbiAgKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmZldGNoV2l0aFJldHJ5JywgZXJyb3IsIHsgdXJsLCBhdHRlbXB0IH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3IgdGhhdCBzaG91bGQgYmUgcmV0cmllZFxuICAgICAgICBjb25zdCBpc05ldHdvcmtFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgKFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VDT05OUkVGVVNFRCcpIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRVRJTUVET1VUJykgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9URk9VTkQnKSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25ldHdvcmsnKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzTmV0d29ya0Vycm9yICYmIGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR3b3JrIHJlcXVlc3QgZmFpbGVkLCByZXRyeWluZyAoJHthdHRlbXB0fS8ke21heFJldHJpZXN9KWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgbmV4dFJldHJ5SW46IHJldHJ5RGVsYXkgKiBhdHRlbXB0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeURlbGF5ICogYXR0ZW1wdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vdCBhIG5ldHdvcmsgZXJyb3Igb3IgbGFzdCBhdHRlbXB0LCB0aHJvdyBpbW1lZGlhdGVseVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgYWxsIHJldHJpZXMnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc3RhdHVzXG4gICAqL1xuICBhc3luYyBnZXRBdXRoU3RhdHVzKCk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNUb2tlbjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHVzZXIgaW5mbyB0byB2YWxpZGF0ZSB0b2tlblxuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW4pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICAgIGhhc1Rva2VuOiB0cnVlLFxuICAgICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICAgIHNjb3BlczogdXNlckluZm8uc2NvcGVzXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUb2tlbiBtaWdodCBiZSBpbnZhbGlkIG9yIGV4cGlyZWRcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuY2hlY2tBdXRoU3RhdHVzJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgaGFzVG9rZW46IHRydWUgLy8gSGFzIHRva2VuIGJ1dCBpdCdzIGludmFsaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhdGUgdGhlIGRldmljZSBmbG93IGF1dGhlbnRpY2F0aW9uIHByb2Nlc3NcbiAgICovXG4gIGFzeW5jIGluaXRpYXRlRGV2aWNlRmxvdygpOiBQcm9taXNlPERldmljZUNvZGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAvLyBnZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIGEgdmFsdWUgKGVudiwgY29uZmlnLCBvciBkZWZhdWx0KVxuICAgIFxuICAgIC8vIExvZyB0aGUgT0F1dGggZmxvdyBzdGVwIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfMTogR2V0dGluZyBjbGllbnQgSUQnLCB7IGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicgfSk7XG4gICAgXG4gICAgaWYgKCFjbGllbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPQVVUSF9OT19DTElFTlRfSUQ6IE5vIE9BdXRoIGNsaWVudCBJRCBjb25maWd1cmVkLiBTZXQgRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQgZW52aXJvbm1lbnQgdmFyaWFibGUuJyk7XG4gICAgfVxuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF8yOiBJbml0aWF0aW5nIGRldmljZSBmbG93JywgeyB1cmw6IEdpdEh1YkF1dGhNYW5hZ2VyLkRFVklDRV9DT0RFX1VSTCB9KTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KEdpdEh1YkF1dGhNYW5hZ2VyLkRFVklDRV9DT0RFX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgICAgICBzY29wZTogJ3B1YmxpY19yZXBvIHJlYWQ6dXNlcidcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ09BVVRIX1NURVBfMzogR2l0SHViIHJlc3BvbnNlJywgeyBcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ3gtZ2l0aHViLXJlcXVlc3QtaWQnOiByZXNwb25zZS5oZWFkZXJzLmdldCgneC1naXRodWItcmVxdWVzdC1pZCcpLFxuICAgICAgICAgICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnOiByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVtYWluaW5nJylcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0dpdEh1YiBPQXV0aCBlbmRwb2ludCBlcnJvcicsIHsgXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICByZXNwb25zZUJvZHk6IHJlc3BvbnNlVGV4dCxcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KSArICcuLi4nXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gUGFyc2UgR2l0SHViJ3MgZXJyb3IgcmVzcG9uc2UgZm9yIHNwZWNpZmljIGVycm9yIGNvZGVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZVRleHQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09ICd1bmF1dGhvcml6ZWRfY2xpZW50Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9DTElFTlRfVU5BVVRIT1JJWkVEOiBPQXV0aCBhcHAgJyR7Y2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KX0uLi4nIGlzIG5vdCBhdXRob3JpemVkIGZvciBkZXZpY2UgZmxvdy4gVGhlIGFwcCBtYXkgbmVlZCByZWNvbmZpZ3VyYXRpb24uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09ICdpbnZhbGlkX2NsaWVudCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfQ0xJRU5UX0lOVkFMSUQ6IEdpdEh1YiByZWplY3RlZCBPQXV0aCBjbGllbnQgSUQgJyR7Y2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KX0uLi4nLiBUaGUgYXBwIG1heSBub3QgZXhpc3Qgb3IgYmUgZGlzYWJsZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JfZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfQVBJX0VSUk9SOiAke2Vycm9yRGF0YS5lcnJvcl9kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBjYW4ndCBwYXJzZSB0aGUgZXJyb3IsIHByb3ZpZGUgSFRUUCBzdGF0dXMgc3BlY2lmaWMgZXJyb3JcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfQ0xJRU5UX0lOVkFMSUQ6IEdpdEh1YiByZWplY3RlZCBPQXV0aCBjbGllbnQgSUQgJyR7Y2xpZW50SWQ/LnN1YnN0cmluZygwLCA4KX0uLi4nLiBUaGUgYXBwIG1heSBub3QgZXhpc3Qgb3IgYmUgZGlzYWJsZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9ERVZJQ0VfRkxPV19ESVNBQkxFRDogVGhpcyBPQXV0aCBhcHAgZG9lc24ndCBoYXZlIGRldmljZSBmbG93IGVuYWJsZWQuIENvbnRhY3QgYWRtaW5pc3RyYXRvci5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX1JBVEVfTElNSVRFRDogVG9vIG1hbnkgYXV0aGVudGljYXRpb24gYXR0ZW1wdHMuIFBsZWFzZSB3YWl0IGJlZm9yZSB0cnlpbmcgYWdhaW4uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT0FVVEhfSFRUUF8ke3Jlc3BvbnNlLnN0YXR1c306IEdpdEh1YiBPQXV0aCBmYWlsZWQgLSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcmVzcG9uc2VcbiAgICAgIGlmICghZGF0YS5kZXZpY2VfY29kZSB8fCAhZGF0YS51c2VyX2NvZGUgfHwgIWRhdGEudmVyaWZpY2F0aW9uX3VyaSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgZGV2aWNlIGZsb3cgcmVzcG9uc2Ugc3RydWN0dXJlJywgeyBcbiAgICAgICAgICBoYXNEZXZpY2VDb2RlOiAhIWRhdGEuZGV2aWNlX2NvZGUsXG4gICAgICAgICAgaGFzVXNlckNvZGU6ICEhZGF0YS51c2VyX2NvZGUsXG4gICAgICAgICAgaGFzVmVyaWZpY2F0aW9uVXJpOiAhIWRhdGEudmVyaWZpY2F0aW9uX3VyaVxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPQVVUSF9JTlZBTElEX1JFU1BPTlNFOiBJbnZhbGlkIGRldmljZSBmbG93IHJlc3BvbnNlIGZyb20gR2l0SHViIC0gbWlzc2luZyByZXF1aXJlZCBmaWVsZHMnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5pbml0aWF0ZURldmljZUZsb3cnLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIE9BdXRoIGRldmljZSBmbG93IGluaXRpYXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHVzZXJDb2RlOiBkYXRhLnVzZXJfY29kZSxcbiAgICAgICAgICBleHBpcmVzSW46IGRhdGEuZXhwaXJlc19pbixcbiAgICAgICAgICBpbnRlcnZhbDogZGF0YS5pbnRlcnZhbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGRhdGEgYXMgRGV2aWNlQ29kZVJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmluaXRpYXRlRGV2aWNlRmxvdycsIGVycm9yKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIC8vIFJlLXRocm93IGlmIGl0J3MgYWxyZWFkeSBhIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvciB3aXRoIGNvZGVcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnT0FVVEhfJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRm9ybWF0IG5ldHdvcmsgZXJyb3JzXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFQ09OTlJFRlVTRUQnKSB8fCBcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VUSU1FRE9VVCcpIHx8IFxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PVEZPVU5EJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX05FVFdPUktfRVJST1I6IFVuYWJsZSB0byByZWFjaCBHaXRIdWIgc2VydmVycyAoaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZS9jb2RlKS4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLmApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmV0d29yaycpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9ORVRXT1JLX0VSUk9SOiBOZXR3b3JrIGVycm9yIHdoaWxlIGNvbm5lY3RpbmcgdG8gR2l0SHViLiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdlbmVyaWMgZmFsbGJhY2sgKHNob3VsZCByYXJlbHkgaGFwcGVuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9VTktOT1dOX0VSUk9SOiBGYWlsZWQgdG8gc3RhcnQgR2l0SHViIGF1dGhlbnRpY2F0aW9uIC0gJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQb2xsIGZvciB0b2tlbiBhZnRlciB1c2VyIGhhcyBhdXRob3JpemVkIHRoZSBkZXZpY2VcbiAgICovXG4gIGFzeW5jIHBvbGxGb3JUb2tlbihkZXZpY2VDb2RlOiBzdHJpbmcsIGludGVydmFsOiBudW1iZXIgPSBHaXRIdWJBdXRoTWFuYWdlci5ERUZBVUxUX1BPTExfSU5URVJWQUwpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICAvLyBDcmVhdGUgbmV3IGFib3J0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcG9sbGluZyBzZXNzaW9uXG4gICAgdGhpcy5hY3RpdmVQb2xsaW5nID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuYWN0aXZlUG9sbGluZy5zaWduYWw7XG4gICAgXG4gICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICBcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKGF0dGVtcHRzIDwgR2l0SHViQXV0aE1hbmFnZXIuTUFYX1BPTExfQVRURU1QVFMpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcG9sbGluZyB3YXMgYWJvcnRlZFxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHBvbGxpbmcgd2FzIGNhbmNlbGxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChHaXRIdWJBdXRoTWFuYWdlci5UT0tFTl9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2xpZW50X2lkOiBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpIHx8ICcnLFxuICAgICAgICAgICAgZGV2aWNlX2NvZGU6IGRldmljZUNvZGUsXG4gICAgICAgICAgICBncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHZhcmlvdXMgcmVzcG9uc2Ugc3RhdGVzXG4gICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBjYXNlICdhdXRob3JpemF0aW9uX3BlbmRpbmcnOlxuICAgICAgICAgICAgICAvLyBVc2VyIGhhc24ndCBhdXRob3JpemVkIHlldCwga2VlcCBwb2xsaW5nXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ3Nsb3dfZG93bic6XG4gICAgICAgICAgICAgIC8vIEluY3JlYXNlIHBvbGxpbmcgaW50ZXJ2YWxcbiAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBNYXRoLm1pbihpbnRlcnZhbCAqIDEuNSwgMzAwMDApOyAvLyBNYXggMzAgc2Vjb25kc1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1Nsb3dpbmcgZG93biBwb2xsaW5nIGludGVydmFsJywgeyBuZXdJbnRlcnZhbDogaW50ZXJ2YWwgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2V4cGlyZWRfdG9rZW4nOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhdXRob3JpemF0aW9uIGNvZGUgaGFzIGV4cGlyZWQuIFBsZWFzZSBzdGFydCBvdmVyLicpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2FjY2Vzc19kZW5pZWQnOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gd2FzIGRlbmllZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnT0F1dGggZGV2aWNlIGZsb3cgZXJyb3InLCB7IFxuICAgICAgICAgICAgICAgIGVycm9yOiBkYXRhLmVycm9yLCBcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5lcnJvcl9kZXNjcmlwdGlvbiBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgdHJ5IHN0YXJ0aW5nIHRoZSBwcm9jZXNzIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgIC8vIFN1Y2Nlc3MhXG4gICAgICAgICAgcmV0dXJuIGRhdGEgYXMgVG9rZW5SZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gV2FpdCBiZWZvcmUgbmV4dCBwb2xsXG4gICAgICAgIC8vIFdhaXQgZm9yIGludGVydmFsIHdpdGggYWJvcnQgc3VwcG9ydFxuICAgICAgICBhd2FpdCB0aGlzLndhaXRXaXRoQWJvcnQoaW50ZXJ2YWwsIHNpZ25hbCk7XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV0d29yayBlcnJvcnMgc2hvdWxkbid0IHN0b3AgcG9sbGluZ1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLnBvbGxGb3JUb2tlbicsIGVycm9yLCB7IGF0dGVtcHQ6IGF0dGVtcHRzIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRXaXRoQWJvcnQoaW50ZXJ2YWwsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gdGltZWQgb3V0LiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhciBhY3RpdmUgcG9sbGluZyByZWZlcmVuY2VcbiAgICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ29tcGxldGUgdGhlIGF1dGhlbnRpY2F0aW9uIGZsb3cgYW5kIHN0b3JlIHRoZSB0b2tlblxuICAgKi9cbiAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbih0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlKTogUHJvbWlzZTxBdXRoU3RhdHVzPiB7XG4gICAgLy8gU3RvcmUgdG9rZW4gc2VjdXJlbHlcbiAgICBhd2FpdCB0aGlzLnN0b3JlVG9rZW4odG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xuICAgIFxuICAgIC8vIEdldCB1c2VyIGluZm9cbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuZmV0Y2hVc2VySW5mbyh0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbik7XG4gICAgXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gY29tcGxldGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuY29tcGxldGVBdXRoZW50aWNhdGlvbicsXG4gICAgICBkZXRhaWxzOiAnR2l0SHViIE9BdXRoIGRldmljZSBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJJbmZvLmxvZ2luLFxuICAgICAgICBzY29wZXM6IHRva2VuUmVzcG9uc2Uuc2NvcGUuc3BsaXQoJyAnKSxcbiAgICAgICAgdG9rZW5UeXBlOiBUb2tlbk1hbmFnZXIuZ2V0VG9rZW5UeXBlKHRva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBoYXNUb2tlbjogdHJ1ZSxcbiAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgIHNjb3BlczogdG9rZW5SZXNwb25zZS5zY29wZS5zcGxpdCgnICcpXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIHN0b3JlZCBhdXRoZW50aWNhdGlvbiBhbmQgcmV2b2tlIHRva2VuXG4gICAqL1xuICBhc3luYyBjbGVhckF1dGhlbnRpY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIHRva2VuIGJlZm9yZSBjbGVhcmluZyBpdFxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byByZXZva2UgdGhlIHRva2VuIG9uIEdpdEh1YlxuICAgICAgICAvLyBOb3RlOiBHaXRIdWIgT0F1dGggdG9rZW5zIGRvbid0IGhhdmUgYSByZXZvY2F0aW9uIGVuZHBvaW50IGZvciBkZXZpY2UgZmxvdyB0b2tlbnNcbiAgICAgICAgLy8gQnV0IHdlJ2xsIGNsZWFyIHRoZSBjYWNoZSBhbmQgcmVtb3ZlIGZyb20gc3RvcmFnZVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGVkIHVzZXIgaW5mb1xuICAgICAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fQ0FDSEVfQ0xFQVJFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6ICdHaXRIdWIgYXV0aGVudGljYXRpb24gY2xlYXJlZCBieSB1c2VyIHJlcXVlc3QnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBoYWRUb2tlbjogdHJ1ZSxcbiAgICAgICAgICAgIHRva2VuUHJlZml4OiBUb2tlbk1hbmFnZXIuZ2V0VG9rZW5QcmVmaXgodG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIGZyb20gc2VjdXJlIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFRva2VuTWFuYWdlci5yZW1vdmVTdG9yZWRUb2tlbigpO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGNsZWFyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuY2xlYXJBdXRoZW50aWNhdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignRmFpbGVkIHRvIGNsZWFyIGF1dGhlbnRpY2F0aW9uJywgRXJyb3JDYXRlZ29yeS5BVVRIX0VSUk9SLCB1bmRlZmluZWQsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdG9yZSB0b2tlbiBzZWN1cmVseSB1c2luZyBlbmNyeXB0ZWQgZmlsZSBzdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN0b3JlVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBUb2tlbk1hbmFnZXIuc3RvcmVHaXRIdWJUb2tlbih0b2tlbik7XG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIHRva2VuIHN0b3JlZCBzZWN1cmVseS4gWW91IGFyZSBub3cgYXV0aGVudGljYXRlZCEnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5zdG9yZVRva2VuJywgZXJyb3IpO1xuICAgICAgLy8gRmFsbGJhY2sgdG8gZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdHJ1Y3Rpb25zXG4gICAgICBsb2dnZXIuaW5mbygnRm9yIG1hbnVhbCBzZXR1cCwgeW91IGNhbiBzZXQgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzdG9yZSBHaXRIdWIgdG9rZW4nLCBFcnJvckNhdGVnb3J5LkFVVEhfRVJST1IpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIHVzZXIgaW5mb3JtYXRpb24gZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hVc2VySW5mbyh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuYXBpQ2FjaGUuZ2V0KEdpdEh1YkF1dGhNYW5hZ2VyLlVTRVJfVVJMKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoR2l0SHViQXV0aE1hbmFnZXIuVVNFUl9VUkwsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzLCAndXNlciBpbmZvcm1hdGlvbiBmZXRjaCcpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZmV0Y2ggdXNlciBpbmZvJywgeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSB1c2VybmFtZSBhbmQgb3RoZXIgdGV4dCBmaWVsZHMgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBpZiAoZGF0YS5sb2dpbikge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubG9naW4pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHVzZXJuYW1lIGNvbnRhaW5zIGludmFsaWQgVW5pY29kZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgICAgICBvcmlnaW5hbExlbmd0aDogZGF0YS5sb2dpbi5sZW5ndGgsXG4gICAgICAgICAgICBkZXRlY3RlZElzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlcm5hbWUgZm9ybWF0IGZyb20gR2l0SHViJyk7XG4gICAgICB9XG4gICAgICBkYXRhLmxvZ2luID0gdmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGRpc3BsYXkgbmFtZSBpZiBwcmVzZW50XG4gICAgaWYgKGRhdGEubmFtZSkge1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLm5hbWUpO1xuICAgICAgaWYgKG5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgZGF0YS5uYW1lID0gbmFtZVZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBmYWlsIG9uIGRpc3BsYXkgbmFtZSwganVzdCByZW1vdmUgaXRcbiAgICAgICAgZGVsZXRlIGRhdGEubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIHNjb3BlcyBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICBjb25zdCBzY29wZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW9hdXRoLXNjb3BlcycpO1xuICAgIGlmIChzY29wZUhlYWRlcikge1xuICAgICAgZGF0YS5zY29wZXMgPSBzY29wZUhlYWRlci5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gZm9yIGF1ZGl0IHRyYWlsXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgIGRldGFpbHM6ICdHaXRIdWIgdXNlciBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB1c2VybmFtZTogZGF0YS5sb2dpbixcbiAgICAgICAgaGFzRW1haWw6ICEhZGF0YS5lbWFpbCxcbiAgICAgICAgc2NvcGVzOiBkYXRhLnNjb3BlcyB8fCBbXVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICB0aGlzLmFwaUNhY2hlLnNldChHaXRIdWJBdXRoTWFuYWdlci5VU0VSX1VSTCwgZGF0YSk7XG4gICAgXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgYXV0aGVudGljYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciB1c2Vyc1xuICAgKi9cbiAgZm9ybWF0QXV0aEluc3RydWN0aW9ucyhkZXZpY2VSZXNwb25zZTogRGV2aWNlQ29kZVJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYPCflJAgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxuXG5UbyBhY2Nlc3MgYWxsIERvbGxob3VzZU1DUCBmZWF0dXJlcywgcGxlYXNlIGF1dGhlbnRpY2F0ZSB3aXRoIEdpdEh1YjpcblxuMS4gVmlzaXQ6ICoqJHtkZXZpY2VSZXNwb25zZS52ZXJpZmljYXRpb25fdXJpfSoqXG4yLiBFbnRlciBjb2RlOiAqKiR7ZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlfSoqXG4zLiBBdXRob3JpemUgJ0RvbGxob3VzZU1DUCBDb2xsZWN0aW9uJ1xuXG5UaGlzIHdpbGwgZ3JhbnQgYWNjZXNzIHRvOlxu4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cbuKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50ICBcbuKchSBTdWJtaXQgeW91ciBvd24gY3JlYXRpb25zXG5cbkRvbid0IGhhdmUgYSBHaXRIdWIgYWNjb3VudD8gWW91J2xsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUgKGl0J3MgZnJlZSEpXG5cbuKPse+4jyBUaGlzIGNvZGUgZXhwaXJlcyBpbiAke01hdGguZmxvb3IoZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbiAvIDYwKX0gbWludXRlcy5gO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBuZWVkcyB0byBhdXRoZW50aWNhdGUgZm9yIGEgc3BlY2lmaWMgYWN0aW9uXG4gICAqL1xuICBuZWVkc0F1dGhGb3JBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhdXRoUmVxdWlyZWRBY3Rpb25zID0gWydzdWJtaXQnLCAnY3JlYXRlX3ByJywgJ21hbmFnZV9jb250ZW50J107XG4gICAgcmV0dXJuIGF1dGhSZXF1aXJlZEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogV2FpdCB3aXRoIGFib3J0IHNpZ25hbCBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRXaXRoQWJvcnQobXM6IG51bWJlciwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gICAgICBcbiAgICAgIC8vIExpc3RlbiBmb3IgYWJvcnQgc2lnbmFsXG4gICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignV2FpdCBhYm9ydGVkJykpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIENsZWFuIHVwIGFmdGVyIHRpbWVvdXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgfSwgbXMpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYW4gdXAgYW55IGFjdGl2ZSBvcGVyYXRpb25zIChjYWxsZWQgb24gc2VydmVyIHNodXRkb3duKVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBYm9ydCBhbnkgYWN0aXZlIHBvbGxpbmdcbiAgICBpZiAodGhpcy5hY3RpdmVQb2xsaW5nKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcuYWJvcnQoKTtcbiAgICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG51bGw7XG4gICAgICBcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFudXAnLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGggbWFuYWdlciBjbGVhbmVkIHVwIG9uIHNodXRkb3duJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBoYWRBY3RpdmVQb2xsaW5nOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIGF1dGhlbnRpY2F0aW9uIHBvbGxpbmcgY2FuY2VsbGVkIGR1ZSB0byBzaHV0ZG93bicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhciBBUEkgY2FjaGVcbiAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIEhUVFAgc3RhdHVzIGNvZGVcbiAgICogQXZvaWRzIGV4cG9zaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB3aGlsZSBwcm92aWRpbmcgaGVscGZ1bCBndWlkYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMoc3RhdHVzOiBudW1iZXIsIG9wZXJhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZXF1ZXN0IHRvIEdpdEh1Yi4gUGxlYXNlIGVuc3VyZSB0aGUgT0F1dGggYXBwIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuYDtcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gYEdpdEh1YiBPQXV0aCBpcyBub3QgY29uZmlndXJlZC4gUGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzYDtcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gYEFjY2VzcyBkZW5pZWQgYnkgR2l0SHViLiBUaGUgT0F1dGggYXBwIG1heSBsYWNrIHJlcXVpcmVkIHBlcm1pc3Npb25zLmA7XG4gICAgICBjYXNlIDQwNDpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgc2VydmljZSBub3QgZm91bmQuIFRoaXMgbWF5IGluZGljYXRlIGFuIEFQSSBjaGFuZ2UuYDtcbiAgICAgIGNhc2UgNDIyOlxuICAgICAgICByZXR1cm4gYEludmFsaWQgcGFyYW1ldGVycyBzZW50IHRvIEdpdEh1Yi4gUGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbi5gO1xuICAgICAgY2FzZSA0Mjk6XG4gICAgICAgIHJldHVybiBgVG9vIG1hbnkgcmVxdWVzdHMgdG8gR2l0SHViLiBQbGVhc2Ugd2FpdCBhIG1vbWVudCBhbmQgdHJ5IGFnYWluLmA7XG4gICAgICBjYXNlIDUwMDpcbiAgICAgIGNhc2UgNTAyOlxuICAgICAgY2FzZSA1MDM6XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgc2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtb21lbnRzLmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBzdGF0dXMgZm9yIGRlYnVnZ2luZywgYnV0IGRvbid0IGV4cG9zZSBpdCB0byB1c2Vyc1xuICAgICAgICBsb2dnZXIuZGVidWcoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgZHVyaW5nICR7b3BlcmF0aW9ufWAsIHsgc3RhdHVzIH0pO1xuICAgICAgICByZXR1cm4gYEZhaWxlZCB0byBjb21wbGV0ZSAke29wZXJhdGlvbn0uIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi5gO1xuICAgIH1cbiAgfVxufSJdfQ==
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "1.6.1";
6
- export declare const BUILD_TIMESTAMP = "2025-08-25T21:15:34.362Z";
5
+ export declare const PACKAGE_VERSION = "1.6.3";
6
+ export declare const BUILD_TIMESTAMP = "2025-08-25T23:14:28.135Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '1.6.1';
6
- export const BUILD_TIMESTAMP = '2025-08-25T21:15:34.362Z';
5
+ export const PACKAGE_VERSION = '1.6.3';
6
+ export const BUILD_TIMESTAMP = '2025-08-25T23:14:28.135Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjYuMSc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDgtMjVUMjE6MTU6MzQuMzYyWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjYuMyc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDgtMjVUMjM6MTQ6MjguMTM1Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}