@dollhousemcp/mcp-server 1.3.2 → 1.4.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.
- package/CHANGELOG.md +57 -0
- package/README.md +100 -5
- package/dist/collection/ElementInstaller.d.ts.map +1 -1
- package/dist/collection/ElementInstaller.js +2 -4
- package/dist/elements/agents/AgentManager.js +2 -2
- package/dist/elements/index.d.ts +0 -2
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -3
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +3 -2
- package/dist/elements/skills/SkillManager.d.ts +89 -0
- package/dist/elements/skills/SkillManager.d.ts.map +1 -0
- package/dist/elements/skills/SkillManager.js +412 -0
- package/dist/elements/skills/index.d.ts +1 -0
- package/dist/elements/skills/index.d.ts.map +1 -1
- package/dist/elements/skills/index.js +2 -1
- package/dist/elements/templates/TemplateManager.d.ts +9 -0
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +28 -1
- package/dist/index.d.ts +104 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1166 -6
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +1 -3
- package/dist/portfolio/types.d.ts +6 -6
- package/dist/portfolio/types.d.ts.map +1 -1
- package/dist/portfolio/types.js +7 -7
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +6 -1
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +5 -2
- package/dist/server/tools/CollectionTools.js +6 -6
- package/dist/server/tools/ElementTools.d.ts +11 -0
- package/dist/server/tools/ElementTools.d.ts.map +1 -0
- package/dist/server/tools/ElementTools.js +303 -0
- package/dist/server/tools/index.d.ts +1 -0
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +2 -1
- package/dist/server/types.d.ts +31 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/utils/filesystem.d.ts.map +1 -1
- package/dist/utils/filesystem.js +17 -5
- package/package.json +1 -1
- package/dist/elements/ensembles/Ensemble.d.ts +0 -144
- package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
- package/dist/elements/ensembles/Ensemble.js +0 -860
- package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
- package/dist/elements/ensembles/EnsembleManager.js +0 -378
- package/dist/elements/ensembles/constants.d.ts +0 -73
- package/dist/elements/ensembles/constants.d.ts.map +0 -1
- package/dist/elements/ensembles/constants.js +0 -92
- package/dist/elements/ensembles/index.d.ts +0 -8
- package/dist/elements/ensembles/index.d.ts.map +0 -1
- package/dist/elements/ensembles/index.js +0 -8
- package/dist/elements/ensembles/types.d.ts +0 -92
- package/dist/elements/ensembles/types.d.ts.map +0 -1
- package/dist/elements/ensembles/types.js +0 -8
- package/dist/elements/memories/Memory.d.ts +0 -110
- package/dist/elements/memories/Memory.d.ts.map +0 -1
- package/dist/elements/memories/Memory.js +0 -470
- package/dist/elements/memories/MemoryManager.d.ts +0 -86
- package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
- package/dist/elements/memories/MemoryManager.js +0 -435
- package/dist/elements/memories/constants.d.ts +0 -42
- package/dist/elements/memories/constants.d.ts.map +0 -1
- package/dist/elements/memories/constants.js +0 -49
- package/dist/elements/memories/index.d.ts +0 -6
- package/dist/elements/memories/index.d.ts.map +0 -1
- package/dist/elements/memories/index.js +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,63 @@ All notable changes to DollhouseMCP will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.4.0] - 2025-08-02
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **BREAKING**: Element types now use singular naming convention (#435)
|
|
12
|
+
- Previous: 'skills', 'personas', 'templates', 'agents'
|
|
13
|
+
- New: 'skill', 'persona', 'template', 'agent'
|
|
14
|
+
- Standardized element system architecture across all types
|
|
15
|
+
- Updated version to 1.4.0 to reflect breaking changes
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- Generic CRUD operations for all element types (from v1.3.4 development)
|
|
19
|
+
- create_element - Create any element type
|
|
20
|
+
- edit_element - Modify element metadata and content
|
|
21
|
+
- validate_element - Comprehensive validation with feedback
|
|
22
|
+
- delete_element - Safe deletion with data cleanup
|
|
23
|
+
- Memory and Ensemble element types (placeholders for future release)
|
|
24
|
+
- Enhanced security throughout element system
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- Sync issues between main and develop branches
|
|
28
|
+
- Consolidated naming conventions across codebase
|
|
29
|
+
- Resolved version conflicts (main had v1.3.3, develop had v1.3.4)
|
|
30
|
+
|
|
31
|
+
## [1.3.4] - 2025-08-02
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- **Complete Element System Documentation** (#424): Comprehensive guides for all element types
|
|
35
|
+
- ELEMENT_ARCHITECTURE.md - System design and core concepts
|
|
36
|
+
- ELEMENT_DEVELOPER_GUIDE.md - Step-by-step creation guide
|
|
37
|
+
- ELEMENT_TYPES.md - Reference for all 6 element types
|
|
38
|
+
- API_REFERENCE.md - Complete MCP tool documentation
|
|
39
|
+
- MIGRATION_TO_PORTFOLIO.md - User migration guide
|
|
40
|
+
- **Generic Element Tools** (#417, #418, #419): Universal tools for all element types
|
|
41
|
+
- create_element - Create any element type
|
|
42
|
+
- edit_element - Modify element metadata and content
|
|
43
|
+
- validate_element - Comprehensive validation with feedback
|
|
44
|
+
- delete_element - Safe deletion with confirmation
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
- **CodeQL Security Alerts** (#431): Resolved false positives in test files
|
|
48
|
+
- Added proper suppression configuration
|
|
49
|
+
- Fixed typo in .codeql-suppress filename
|
|
50
|
+
- Enhanced documentation in test files
|
|
51
|
+
- **Previously Completed Issues**: Closed issues that were already implemented
|
|
52
|
+
- #417, #418, #419 - Element tools (implemented in PR #422)
|
|
53
|
+
- #402 - NPM_TOKEN already configured
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
- **Issue Prioritization**: Updated priorities for better roadmap clarity
|
|
57
|
+
- Moved Ensemble Runtime Management (#300) to R&D/experimental
|
|
58
|
+
- Adjusted labels to reflect current development focus
|
|
59
|
+
|
|
60
|
+
### Security
|
|
61
|
+
- **Test File Suppressions**: Properly configured CodeQL to handle intentional test patterns
|
|
62
|
+
- ReDoS test patterns now correctly suppressed
|
|
63
|
+
- Security test files properly annotated
|
|
64
|
+
|
|
8
65
|
## [1.3.2] - 2025-07-29
|
|
9
66
|
|
|
10
67
|
### Fixed
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
|
|
|
23
23
|
**🏪 Collection**: https://github.com/DollhouseMCP/collection
|
|
24
24
|
**📦 NPM Package**: https://www.npmjs.com/package/@dollhousemcp/mcp-server
|
|
25
25
|
**🌍 Website**: https://dollhousemcp.com (planned)
|
|
26
|
-
**📦 Version**: v1.3.
|
|
26
|
+
**📦 Version**: v1.3.3
|
|
27
27
|
|
|
28
28
|
> **⚠️ Breaking Change Notice**: Tool names have changed from "marketplace" to "collection" terminology. Old names still work but are deprecated. See [Migration Guide](docs/MIGRATION_GUIDE_COLLECTION_RENAME.md) for details.
|
|
29
29
|
|
|
@@ -56,7 +56,7 @@ Restart Claude Desktop and you're ready to use DollhouseMCP! Try `list_personas`
|
|
|
56
56
|
|
|
57
57
|
| Feature | Description |
|
|
58
58
|
|---------|-------------|
|
|
59
|
-
| 🎭 **
|
|
59
|
+
| 🎭 **30 MCP Tools** | Complete portfolio element management through chat interface |
|
|
60
60
|
| 🏪 **GitHub Collection** | Browse, search, install, and submit personas to community collection |
|
|
61
61
|
| 👤 **User Identity System** | Environment-based attribution for persona creators |
|
|
62
62
|
| 🆔 **Unique ID System** | Advanced ID generation: `{type}_{name}_{author}_{YYYYMMDD}-{HHMMSS}` |
|
|
@@ -66,6 +66,76 @@ Restart Claude Desktop and you're ready to use DollhouseMCP! Try `list_personas`
|
|
|
66
66
|
| 🛡️ **Data Protection** | Copy-on-write for default personas, comprehensive backup system |
|
|
67
67
|
| 🏠 **Local-First Architecture** | Full functionality without cloud dependency |
|
|
68
68
|
|
|
69
|
+
## 🎨 Portfolio Customization Elements (NEW! v1.3.3)
|
|
70
|
+
|
|
71
|
+
DollhouseMCP introduces a comprehensive portfolio system for customizing AI behavior. Your portfolio is your personal collection of AI customization elements that enhance and tailor your AI experience.
|
|
72
|
+
|
|
73
|
+
### Portfolio Element Types
|
|
74
|
+
|
|
75
|
+
| Element | Purpose | Status |
|
|
76
|
+
|---------|---------|--------|
|
|
77
|
+
| 🎭 **Personas** | Define AI personality, tone, and behavioral characteristics | ✅ Available |
|
|
78
|
+
| 🛠️ **Skills** | Add specific capabilities like code review, data analysis, or creative writing | ✅ Available |
|
|
79
|
+
| 📝 **Templates** | Create reusable response formats for emails, reports, documentation | ✅ Available |
|
|
80
|
+
| 🤖 **Agents** | Build autonomous assistants that can pursue goals and make decisions | ✅ Available |
|
|
81
|
+
|
|
82
|
+
### Managing Your Portfolio
|
|
83
|
+
|
|
84
|
+
Use these new generic tools to manage any element type in your portfolio:
|
|
85
|
+
|
|
86
|
+
- **`list_elements`** - Browse your portfolio elements by type
|
|
87
|
+
- **`activate_element`** - Activate elements to customize AI behavior
|
|
88
|
+
- **`get_active_elements`** - View currently active customizations
|
|
89
|
+
- **`deactivate_element`** - Deactivate specific customizations
|
|
90
|
+
- **`get_element_details`** - Examine element configuration and metadata
|
|
91
|
+
- **`reload_elements`** - Refresh portfolio from filesystem
|
|
92
|
+
|
|
93
|
+
### Specialized Element Tools
|
|
94
|
+
|
|
95
|
+
Some portfolio elements have specialized operations:
|
|
96
|
+
|
|
97
|
+
- **`render_template`** - Generate content using template elements with variables
|
|
98
|
+
- **`execute_agent`** - Deploy agent elements to accomplish specific goals
|
|
99
|
+
|
|
100
|
+
### Portfolio Examples
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
# Browse your skill portfolio
|
|
104
|
+
list_elements type="skills"
|
|
105
|
+
|
|
106
|
+
# Activate a code review skill
|
|
107
|
+
activate_element name="code-review" type="skills"
|
|
108
|
+
|
|
109
|
+
# Activate a professional email template
|
|
110
|
+
activate_element name="email-professional" type="templates"
|
|
111
|
+
|
|
112
|
+
# Use a template to generate content
|
|
113
|
+
render_template name="project-update" variables='{"project": "DollhouseMCP", "status": "Released"}'
|
|
114
|
+
|
|
115
|
+
# Deploy an agent for a specific task
|
|
116
|
+
execute_agent name="project-manager" goal="Create a sprint plan for next week"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Portfolio Structure
|
|
120
|
+
|
|
121
|
+
Your portfolio lives in `~/.dollhouse/portfolio/` with elements organized by type:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
~/.dollhouse/portfolio/
|
|
125
|
+
├── personas/ # Personality and behavior profiles
|
|
126
|
+
├── skills/ # Specialized capabilities
|
|
127
|
+
├── templates/ # Reusable content structures
|
|
128
|
+
└── agents/ # Autonomous assistants
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Legacy Persona Tools
|
|
132
|
+
|
|
133
|
+
For backward compatibility, the original persona-specific tools still work:
|
|
134
|
+
- `list_personas` → calls `list_elements type="personas"`
|
|
135
|
+
- `activate_persona` → calls `activate_element type="personas"`
|
|
136
|
+
- `get_active_persona` → calls `get_active_elements type="personas"`
|
|
137
|
+
- etc.
|
|
138
|
+
|
|
69
139
|
## 🔒 Enterprise-Grade Security (v1.2.4)
|
|
70
140
|
|
|
71
141
|
DollhouseMCP implements comprehensive security measures to protect your personas and system:
|
|
@@ -195,11 +265,23 @@ Add DollhouseMCP to your Claude Desktop configuration:
|
|
|
195
265
|
**🔄 After configuration:**
|
|
196
266
|
1. Save the file
|
|
197
267
|
2. Restart Claude Desktop completely
|
|
198
|
-
3. All
|
|
268
|
+
3. All 30 DollhouseMCP tools will be available
|
|
269
|
+
|
|
270
|
+
## 🛠️ Available Tools (30 Total)
|
|
271
|
+
|
|
272
|
+
### Portfolio Element Management (NEW!)
|
|
273
|
+
- **`list_elements`** - List all elements of a specific type
|
|
274
|
+
- **`activate_element`** - Activate an element by name and type
|
|
275
|
+
- **`get_active_elements`** - Get currently active elements of a type
|
|
276
|
+
- **`deactivate_element`** - Deactivate a specific element
|
|
277
|
+
- **`get_element_details`** - View detailed information about an element
|
|
278
|
+
- **`reload_elements`** - Refresh elements from filesystem
|
|
199
279
|
|
|
200
|
-
|
|
280
|
+
### Element-Specific Operations (NEW!)
|
|
281
|
+
- **`render_template`** - Render a template element with provided variables
|
|
282
|
+
- **`execute_agent`** - Execute an agent element with a specific goal
|
|
201
283
|
|
|
202
|
-
### Core Persona Management
|
|
284
|
+
### Core Persona Management (Legacy - Still Supported)
|
|
203
285
|
- **`list_personas`** - Display all local personas with enhanced metadata
|
|
204
286
|
- **`activate_persona`** - Activate by name, filename, or unique ID
|
|
205
287
|
- **`get_active_persona`** - Get current persona information
|
|
@@ -867,6 +949,19 @@ export DEBUG="dollhousemcp:*" # Debug logging (optional)
|
|
|
867
949
|
6. **Validate personas:**
|
|
868
950
|
Use the `reload_personas` tool to check for loading errors
|
|
869
951
|
|
|
952
|
+
## 📚 Documentation
|
|
953
|
+
|
|
954
|
+
### Element System Documentation
|
|
955
|
+
- **[Element Architecture](docs/ELEMENT_ARCHITECTURE.md)** - System design and core concepts
|
|
956
|
+
- **[Element Types Reference](docs/ELEMENT_TYPES.md)** - Detailed guide for all element types
|
|
957
|
+
- **[Developer Guide](docs/ELEMENT_DEVELOPER_GUIDE.md)** - How to create new element types
|
|
958
|
+
- **[API Reference](docs/API_REFERENCE.md)** - Complete MCP tool documentation
|
|
959
|
+
- **[Migration Guide](docs/MIGRATION_TO_PORTFOLIO.md)** - Upgrading from personas-only
|
|
960
|
+
|
|
961
|
+
### Additional Resources
|
|
962
|
+
- **[Security Guidelines](docs/SECURITY.md)** - Security best practices
|
|
963
|
+
- **[Contributing Guide](CONTRIBUTING.md)** - How to contribute
|
|
964
|
+
|
|
870
965
|
## 🤝 Contributing
|
|
871
966
|
|
|
872
967
|
We welcome contributions! DollhouseMCP includes integrated tools for submitting personas directly from Claude.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IA+FF;;OAEG;IACH,OAAO,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IA+FF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;CAmBrG"}
|
|
@@ -108,9 +108,7 @@ export class ElementInstaller {
|
|
|
108
108
|
'personas': ElementType.PERSONA,
|
|
109
109
|
'skills': ElementType.SKILL,
|
|
110
110
|
'templates': ElementType.TEMPLATE,
|
|
111
|
-
'agents': ElementType.AGENT
|
|
112
|
-
'memories': ElementType.MEMORY,
|
|
113
|
-
'ensembles': ElementType.ENSEMBLE
|
|
111
|
+
'agents': ElementType.AGENT
|
|
114
112
|
};
|
|
115
113
|
const elementType = typeMap[typeStr];
|
|
116
114
|
if (!elementType) {
|
|
@@ -139,4 +137,4 @@ export class ElementInstaller {
|
|
|
139
137
|
`🚀 **Ready to use!**`;
|
|
140
138
|
}
|
|
141
139
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFlO0lBQzNCLGdCQUFnQixDQUFtQjtJQUNuQyxPQUFPLEdBQUcsK0RBQStELENBQUM7SUFFbEYsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFPcEMsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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dGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnRzIGZyb20gY29sbGVjdGlvblxuICogU3VwcG9ydHMgYWxsIGVsZW1lbnQgdHlwZXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcbmltcG9ydCB7IElFbGVtZW50TWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBhdGgsIHZhbGlkYXRlRmlsZW5hbWUsIHZhbGlkYXRlQ29udGVudFNpemUgfSBmcm9tICcuLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudEluc3RhbGxlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vY29udGVudHMnO1xuICBcbiAgY29uc3RydWN0b3IoZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLnBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbnN0YWxsIEFJIGN1c3RvbWl6YXRpb24gZWxlbWVudCBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHsgXG4gICAgc3VjY2VzczogYm9vbGVhbjsgXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogSUVsZW1lbnRNZXRhZGF0YTtcbiAgICBlbGVtZW50VHlwZT86IEVsZW1lbnRUeXBlO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9PiB7XG4gICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBpbnB1dCBwYXRoXG4gICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHZhbGlkYXRlUGF0aChpbnB1dFBhdGgpO1xuICAgIFxuICAgIC8vIERldGVjdCBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgIC8vIEV4cGVjdGVkIGZvcm1hdDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZFxuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHNhbml0aXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGF0aFBhcnRzLmxlbmd0aCA8IDMgfHwgcGF0aFBhcnRzWzBdICE9PSAnbGlicmFyeScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHBhdGggZm9ybWF0LiBFeHBlY3RlZDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZCcpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlbGVtZW50VHlwZVN0ciA9IHBhdGhQYXJ0c1sxXTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMuZ2V0RWxlbWVudFR5cGVGcm9tU3RyaW5nKGVsZW1lbnRUeXBlU3RyKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggZW5kcyB3aXRoIC5tZFxuICAgIGlmICghc2FuaXRpemVkUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHR5cGUuIE9ubHkgLm1kIGZpbGVzIGFyZSBhbGxvd2VkLicpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9LyR7c2FuaXRpemVkUGF0aH1gO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIodXJsKTtcbiAgICBcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmlsZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCBkb2VzIG5vdCBwb2ludCB0byBhIGZpbGUnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSBkb3dubG9hZGluZ1xuICAgIGlmIChkYXRhLnNpemUgPiBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHRvbyBsYXJnZSAoJHtkYXRhLnNpemV9IGJ5dGVzLCBtYXggJHtTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFU30gYnl0ZXMpYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlY29kZSBCYXNlNjQgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShkYXRhLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemUgYWZ0ZXIgZGVjb2RpbmdcbiAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcbiAgICBcbiAgICAvLyBTYW5pdGl6ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IENvbnRlbnRWYWxpZGF0b3Iuc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50KTtcbiAgICBcbiAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKHNhbml0aXplZENvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjdXJpdHkgdGhyZWF0IGluIGNvbnRlbnQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlZC5kYXRhIGFzIElFbGVtZW50TWV0YWRhdGE7XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCBtZXRhZGF0YSB2YWxpZGF0aW9uIGZvciBpbmplY3Rpb24gYXR0YWNrc1xuICAgIGNvbnN0IG1ldGFkYXRhVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKCFtZXRhZGF0YVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB2YWxpZGF0aW9uIGZhaWxlZDogJHttZXRhZGF0YVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgbWV0YWRhdGFcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgIW1ldGFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udGVudDogbWlzc2luZyByZXF1aXJlZCBuYW1lIG9yIGRlc2NyaXB0aW9uJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEdlbmVyYXRlIGFuZCB2YWxpZGF0ZSBsb2NhbCBmaWxlbmFtZVxuICAgIGNvbnN0IG9yaWdpbmFsRmlsZW5hbWUgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ2Rvd25sb2FkZWQtZWxlbWVudC5tZCc7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKG9yaWdpbmFsRmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIEdldCBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgZm9yIGVsZW1lbnQgdHlwZVxuICAgIGNvbnN0IGVsZW1lbnREaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgY29uc3QgbG9jYWxQYXRoID0gcGF0aC5qb2luKGVsZW1lbnREaXIsIGZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhsb2NhbFBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7ZmlsZW5hbWV9XFxuXFxuVGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuYFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGluc3RhbGxhdGlvblxuICAgIH1cbiAgICBcbiAgICAvLyBXcml0ZSB0aGUgc2FuaXRpemVkIGZpbGVcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUobG9jYWxQYXRoLCBzYW5pdGl6ZWRDb250ZW50LCAndXRmLTgnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseSFgLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBFbGVtZW50VHlwZSBmcm9tIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50VHlwZUZyb21TdHJpbmcodHlwZVN0cjogc3RyaW5nKTogRWxlbWVudFR5cGUge1xuICAgIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRUeXBlPiA9IHtcbiAgICAgICdwZXJzb25hcyc6IEVsZW1lbnRUeXBlLlBFUlNPTkEsXG4gICAgICAnc2tpbGxzJzogRWxlbWVudFR5cGUuU0tJTEwsXG4gICAgICAndGVtcGxhdGVzJzogRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAnYWdlbnRzJzogRWxlbWVudFR5cGUuQUdFTlQsXG4gICAgICAnbWVtb3JpZXMnOiBFbGVtZW50VHlwZS5NRU1PUlksXG4gICAgICAnZW5zZW1ibGVzJzogRWxlbWVudFR5cGUuRU5TRU1CTEVcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdHlwZU1hcFt0eXBlU3RyXTtcbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZWxlbWVudCB0eXBlOiAke3R5cGVTdHJ9LiBWYWxpZCB0eXBlczogJHtPYmplY3Qua2V5cyh0eXBlTWFwKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZWxlbWVudFR5cGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgaW5zdGFsbGF0aW9uIHN1Y2Nlc3MgbWVzc2FnZVxuICAgKi9cbiAgZm9ybWF0SW5zdGFsbFN1Y2Nlc3MobWV0YWRhdGE6IElFbGVtZW50TWV0YWRhdGEsIGZpbGVuYW1lOiBzdHJpbmcsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZUVtb2ppczogUmVjb3JkPEVsZW1lbnRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW0VsZW1lbnRUeXBlLlBFUlNPTkFdOiAn8J+OrScsXG4gICAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAn8J+OrycsXG4gICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAn8J+ThCcsXG4gICAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAn8J+klicsXG4gICAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ/Cfp6AnLFxuICAgICAgW0VsZW1lbnRUeXBlLkVOU0VNQkxFXTogJ/CfjrwnXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBlbW9qaSA9IHR5cGVFbW9qaXNbZWxlbWVudFR5cGVdIHx8ICfwn5OmJztcbiAgICBjb25zdCB0eXBlTmFtZSA9IGVsZW1lbnRUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZWxlbWVudFR5cGUuc2xpY2UoMSk7XG4gICAgXG4gICAgcmV0dXJuIGDinIUgKipBSSBDdXN0b21pemF0aW9uIEVsZW1lbnQgSW5zdGFsbGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgYCR7ZW1vaml9ICoqJHttZXRhZGF0YS5uYW1lfSoqICR7bWV0YWRhdGEuYXV0aG9yID8gYGJ5ICR7bWV0YWRhdGEuYXV0aG9yfWAgOiAnJ31cXG5gICtcbiAgICAgIGDwn5OBIFR5cGU6ICR7dHlwZU5hbWV9XFxuYCArXG4gICAgICBg8J+ThCBTYXZlZCBhczogJHtmaWxlbmFtZX1cXG5cXG5gICtcbiAgICAgIGDwn5qAICoqUmVhZHkgdG8gdXNlISoqYDtcbiAgfVxufSJdfQ==
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFlO0lBQzNCLGdCQUFnQixDQUFtQjtJQUNuQyxPQUFPLEdBQUcsK0RBQStELENBQUM7SUFFbEYsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFPcEMsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxRQUEwQixFQUFFLFFBQWdCLEVBQUUsV0FBd0I7UUFDekYsTUFBTSxVQUFVLEdBQWdDO1lBQzlDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDM0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO1lBQzVCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUk7WUFDekIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSTtZQUMxQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO1NBQzdCLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RSxPQUFPLDREQUE0RDtZQUNqRSxHQUFHLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUk7WUFDbkYsWUFBWSxRQUFRLElBQUk7WUFDeEIsZ0JBQWdCLFFBQVEsTUFBTTtZQUM5QixzQkFBc0IsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50cyBmcm9tIGNvbGxlY3Rpb25cbiAqIFN1cHBvcnRzIGFsbCBlbGVtZW50IHR5cGVzOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cywgbWVtb3JpZXMsIGVuc2VtYmxlc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lLCB2YWxpZGF0ZUNvbnRlbnRTaXplIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJbnN0YWxsZXIge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgYmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50KSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5zdGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdHMgZWxlbWVudCB0eXBlIGZyb20gcGF0aCBzdHJ1Y3R1cmVcbiAgICovXG4gIGFzeW5jIGluc3RhbGxDb250ZW50KGlucHV0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IFxuICAgIHN1Y2Nlc3M6IGJvb2xlYW47IFxuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IElFbGVtZW50TWV0YWRhdGE7XG4gICAgZWxlbWVudFR5cGU/OiBFbGVtZW50VHlwZTtcbiAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgfT4ge1xuICAgIC8vIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSB0aGUgaW5wdXQgcGF0aFxuICAgIGNvbnN0IHNhbml0aXplZFBhdGggPSB2YWxpZGF0ZVBhdGgoaW5wdXRQYXRoKTtcbiAgICBcbiAgICAvLyBEZXRlY3QgZWxlbWVudCB0eXBlIGZyb20gcGF0aCBzdHJ1Y3R1cmVcbiAgICAvLyBFeHBlY3RlZCBmb3JtYXQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWRcbiAgICBjb25zdCBwYXRoUGFydHMgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPCAzIHx8IHBhdGhQYXJ0c1swXSAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoIGZvcm1hdC4gRXhwZWN0ZWQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWQnKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZWxlbWVudFR5cGVTdHIgPSBwYXRoUGFydHNbMV07XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLmdldEVsZW1lbnRUeXBlRnJvbVN0cmluZyhlbGVtZW50VHlwZVN0cik7XG4gICAgXG4gICAgLy8gRW5zdXJlIHRoZSBwYXRoIGVuZHMgd2l0aCAubWRcbiAgICBpZiAoIXNhbml0aXplZFBhdGguZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmlsZSB0eXBlLiBPbmx5IC5tZCBmaWxlcyBhcmUgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS8ke3Nhbml0aXplZFBhdGh9YDtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgZG93bmxvYWRpbmdcbiAgICBpZiAoZGF0YS5zaXplID4gU0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSB0b28gbGFyZ2UgKCR7ZGF0YS5zaXplfSBieXRlcywgbWF4ICR7U0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVN9IGJ5dGVzKWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBEZWNvZGUgQmFzZTY0IGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29udGVudCBzaXplIGFmdGVyIGRlY29kaW5nXG4gICAgdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50LCBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUyk7XG4gICAgXG4gICAgLy8gU2FuaXRpemUgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgIGNvbnN0IHNhbml0aXplZENvbnRlbnQgPSBDb250ZW50VmFsaWRhdG9yLnNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudCk7XG4gICAgXG4gICAgLy8gVXNlIHNlY3VyZSBZQU1MIHBhcnNlclxuICAgIGxldCBwYXJzZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIuc2FmZU1hdHRlcihzYW5pdGl6ZWRDb250ZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3VyaXR5IHRocmVhdCBpbiBjb250ZW50OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBJRWxlbWVudE1ldGFkYXRhO1xuICAgIFxuICAgIC8vIEFkZGl0aW9uYWwgbWV0YWRhdGEgdmFsaWRhdGlvbiBmb3IgaW5qZWN0aW9uIGF0dGFja3NcbiAgICBjb25zdCBtZXRhZGF0YVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmICghbWV0YWRhdGFWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjdXJpdHkgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7bWV0YWRhdGFWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8ICFtZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRlbnQ6IG1pc3NpbmcgcmVxdWlyZWQgbmFtZSBvciBkZXNjcmlwdGlvbicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBhbmQgdmFsaWRhdGUgbG9jYWwgZmlsZW5hbWVcbiAgICBjb25zdCBvcmlnaW5hbEZpbGVuYW1lID0gc2FuaXRpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICdkb3dubG9hZGVkLWVsZW1lbnQubWQnO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdmFsaWRhdGVGaWxlbmFtZShvcmlnaW5hbEZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBHZXQgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGZvciBlbGVtZW50IHR5cGVcbiAgICBjb25zdCBlbGVtZW50RGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGUpO1xuICAgIGNvbnN0IGxvY2FsUGF0aCA9IHBhdGguam9pbihlbGVtZW50RGlyLCBmaWxlbmFtZSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MobG9jYWxQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50IGFscmVhZHkgZXhpc3RzOiAke2ZpbGVuYW1lfVxcblxcblRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLmBcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBpbnN0YWxsYXRpb25cbiAgICB9XG4gICAgXG4gICAgLy8gV3JpdGUgdGhlIHNhbml0aXplZCBmaWxlXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGxvY2FsUGF0aCwgc2FuaXRpemVkQ29udGVudCwgJ3V0Zi04Jyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50IGluc3RhbGxlZCBzdWNjZXNzZnVsbHkhYCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBlbGVtZW50VHlwZVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgRWxlbWVudFR5cGUgZnJvbSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudFR5cGVGcm9tU3RyaW5nKHR5cGVTdHI6IHN0cmluZyk6IEVsZW1lbnRUeXBlIHtcbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50VHlwZT4gPSB7XG4gICAgICAncGVyc29uYXMnOiBFbGVtZW50VHlwZS5QRVJTT05BLFxuICAgICAgJ3NraWxscyc6IEVsZW1lbnRUeXBlLlNLSUxMLFxuICAgICAgJ3RlbXBsYXRlcyc6IEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgJ2FnZW50cyc6IEVsZW1lbnRUeXBlLkFHRU5UXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IHR5cGVNYXBbdHlwZVN0cl07XG4gICAgaWYgKCFlbGVtZW50VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVsZW1lbnQgdHlwZTogJHt0eXBlU3RyfS4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LmtleXModHlwZU1hcCkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGluc3RhbGxhdGlvbiBzdWNjZXNzIG1lc3NhZ2VcbiAgICovXG4gIGZvcm1hdEluc3RhbGxTdWNjZXNzKG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhLCBmaWxlbmFtZTogc3RyaW5nLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVFbW9qaXM6IFJlY29yZDxFbGVtZW50VHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJ/Cfjq0nLFxuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMXTogJ/Cfjq8nLFxuICAgICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ/Cfk4QnLFxuICAgICAgW0VsZW1lbnRUeXBlLkFHRU5UXTogJ/CfpJYnLFxuICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWV06ICfwn6egJyxcbiAgICAgIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06ICfwn468J1xuICAgIH07XG4gICAgXG4gICAgY29uc3QgZW1vamkgPSB0eXBlRW1vamlzW2VsZW1lbnRUeXBlXSB8fCAn8J+Tpic7XG4gICAgY29uc3QgdHlwZU5hbWUgPSBlbGVtZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGVsZW1lbnRUeXBlLnNsaWNlKDEpO1xuICAgIFxuICAgIHJldHVybiBg4pyFICoqQUkgQ3VzdG9taXphdGlvbiBFbGVtZW50IEluc3RhbGxlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgIGAke2Vtb2ppfSAqKiR7bWV0YWRhdGEubmFtZX0qKiAke21ldGFkYXRhLmF1dGhvciA/IGBieSAke21ldGFkYXRhLmF1dGhvcn1gIDogJyd9XFxuYCArXG4gICAgICBg8J+TgSBUeXBlOiAke3R5cGVOYW1lfVxcbmAgK1xuICAgICAgYPCfk4QgU2F2ZWQgYXM6ICR7ZmlsZW5hbWV9XFxuXFxuYCArXG4gICAgICBg8J+agCAqKlJlYWR5IHRvIHVzZSEqKmA7XG4gIH1cbn0iXX0=
|
|
@@ -25,7 +25,7 @@ export class AgentManager {
|
|
|
25
25
|
agentsPath;
|
|
26
26
|
stateCache = new Map();
|
|
27
27
|
constructor(portfolioPath) {
|
|
28
|
-
this.agentsPath = path.join(portfolioPath,
|
|
28
|
+
this.agentsPath = path.join(portfolioPath, ElementType.AGENT);
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Initialize the agents directory structure
|
|
@@ -612,4 +612,4 @@ export class AgentManager {
|
|
|
612
612
|
return agent;
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsWUFBWTtBQUNaLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUMzQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUTtBQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsdUJBQXVCO0FBZXhELE1BQU0sT0FBTyxZQUFZO0lBQ04sVUFBVSxDQUFTO0lBQ25CLFVBQVUsR0FBNEIsSUFBSSxHQUFHLEVBQUUsQ0FB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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZ2VudE1hbmFnZXIgLSBIYW5kbGVzIENSVUQgb3BlcmF0aW9ucyBmb3IgQWdlbnQgZWxlbWVudHNcbiAqIEZvbGxvd3MgcGF0dGVybnMgZnJvbSBQZXJzb25hRWxlbWVudE1hbmFnZXIgYW5kIE1lbW9yeU1hbmFnZXJcbiAqIFxuICogU0VDVVJJVFk6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIGZvciBhdG9taWMgb3BlcmF0aW9ucyBhbmQgU2VjdXJlWWFtbFBhcnNlciBmb3Igc2FmZSBZQU1MIHBhcnNpbmdcbiAqL1xuXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4vQWdlbnQuanMnO1xuaW1wb3J0IHsgQWdlbnRNZXRhZGF0YSwgQWdlbnRTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyLCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8vIENvbnN0YW50c1xuY29uc3QgQUdFTlRfRklMRV9FWFRFTlNJT04gPSAnLm1kJztcbmNvbnN0IFNUQVRFX0RJUkVDVE9SWSA9ICcuc3RhdGUnO1xuY29uc3QgU1RBVEVfRklMRV9FWFRFTlNJT04gPSAnLnN0YXRlLnlhbWwnO1xuY29uc3QgTUFYX0ZJTEVfU0laRSA9IDEwMCAqIDEwMjQ7IC8vIDEwMEtCXG5jb25zdCBNQVhfWUFNTF9TSVpFID0gNjQgKiAxMDI0OyAvLyA2NEtCIGZvciBmcm9udG1hdHRlclxuXG4vLyBFbGVtZW50IGNyZWF0aW9uIHJlc3VsdCBpbnRlcmZhY2VcbmludGVyZmFjZSBFbGVtZW50Q3JlYXRpb25SZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGVsZW1lbnQ/OiBBZ2VudDtcbn1cblxuaW50ZXJmYWNlIEFnZW50RmlsZURhdGEge1xuICBtZXRhZGF0YTogQWdlbnRNZXRhZGF0YTtcbiAgY29udGVudDogc3RyaW5nO1xuICBzdGF0ZT86IEFnZW50U3RhdGU7XG59XG5cbmV4cG9ydCBjbGFzcyBBZ2VudE1hbmFnZXIgaW1wbGVtZW50cyBJRWxlbWVudE1hbmFnZXI8QWdlbnQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZ2VudHNQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVDYWNoZTogTWFwPHN0cmluZywgQWdlbnRTdGF0ZT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocG9ydGZvbGlvUGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5hZ2VudHNQYXRoID0gcGF0aC5qb2luKHBvcnRmb2xpb1BhdGgsICdhZ2VudHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBhZ2VudHMgZGlyZWN0b3J5IHN0cnVjdHVyZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBhZ2VudHMgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuYWdlbnRzUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSAuc3RhdGUgZGlyZWN0b3J5IGZvciBhZ2VudCBzdGF0ZXNcbiAgICAgIGNvbnN0IHN0YXRlUGF0aCA9IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIFNUQVRFX0RJUkVDVE9SWSk7XG4gICAgICBhd2FpdCBmcy5ta2RpcihzdGF0ZVBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnQWdlbnRNYW5hZ2VyIGluaXRpYWxpemVkJywgeyBwYXRoOiB0aGlzLmFnZW50c1BhdGggfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgQWdlbnRNYW5hZ2VyJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBhZ2VudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBQYXJ0aWFsPEFnZW50TWV0YWRhdGE+XG4gICk6IFByb21pc2U8RWxlbWVudENyZWF0aW9uUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNhbml0aXplIGlucHV0c1xuICAgICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGVzY3JpcHRpb24pLm5vcm1hbGl6ZWRDb250ZW50LCA1MDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCkubm9ybWFsaXplZENvbnRlbnQsIDUwMDAwKTtcblxuICAgICAgLy8gVmFsaWRhdGUgbmFtZVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRWxlbWVudE5hbWUoc2FuaXRpemVkTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBhZ2VudCBuYW1lLiBVc2Ugb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMuJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBhZ2VudCBhbHJlYWR5IGV4aXN0c1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKHNhbml0aXplZE5hbWUpO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBhZ2VudCBpbnN0YW5jZVxuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAgICBuYW1lOiBzYW5pdGl6ZWROYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogc2FuaXRpemVkRGVzY3JpcHRpb24sXG4gICAgICAgIC4uLm1ldGFkYXRhXG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IGF1dGhvclxuICAgICAgYWdlbnQubWV0YWRhdGEuYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG5cbiAgICAgIC8vIFByZXBhcmUgZmlsZSBjb250ZW50XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IHRoaXMuc2VyaWFsaXplVG9GaWxlKGFnZW50LCBzYW5pdGl6ZWRDb250ZW50KTtcblxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgYXRvbWljIGZpbGUgY3JlYXRpb24gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgYWNjZXNzKCkgY2hlY2sgZm9sbG93ZWQgYnkgd3JpdGUsIHdoaWNoIGNvdWxkIHJhY2VcbiAgICAgIC8vIE5vdzogVXNlIGV4Y2x1c2l2ZSBmaWxlIGNyZWF0aW9uIHRoYXQgZmFpbHMgYXRvbWljYWxseSBpZiBmaWxlIGV4aXN0c1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKGZpbGVwYXRoLCAnd3gnKTsgLy8gJ3d4JyA9IGV4Y2x1c2l2ZSB3cml0ZSwgZmFpbHMgaWYgZXhpc3RzXG4gICAgICAgIGF3YWl0IGZkLndyaXRlRmlsZShmaWxlQ29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICAgIGF3YWl0IGZkLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRUVYSVNUJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBZ2VudCAnJHtzYW5pdGl6ZWROYW1lfScgYWxyZWFkeSBleGlzdHNgXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0FnZW50TWFuYWdlci5jcmVhdGUnLFxuICAgICAgICBkZXRhaWxzOiBgQWdlbnQgJyR7c2FuaXRpemVkTmFtZX0nIGNyZWF0ZWRgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBhZ2VudElkOiBhZ2VudC5pZCB9XG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oYEFnZW50IGNyZWF0ZWQ6ICR7c2FuaXRpemVkTmFtZX1gKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYPCfpJYgKioke3Nhbml0aXplZE5hbWV9KiogYnkgJHthZ2VudC5tZXRhZGF0YS5hdXRob3IgfHwgJ2Fub255bW91cyd9YCxcbiAgICAgICAgZWxlbWVudDogYWdlbnRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhZ2VudCcsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdGYWlsZWQgdG8gY3JlYXRlIGFnZW50J1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhbiBhZ2VudCBieSBuYW1lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVhZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFnZW50IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCAxMDApO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKHNhbml0aXplZE5hbWUpO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIFJlYWQgZmlsZSB3aXRoIGxvY2tcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoZmlsZXBhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZpbGUgc2l6ZVxuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gTUFYX0ZJTEVfU0laRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFnZW50IGZpbGUgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfRklMRV9TSVpFfSBieXRlc2ApO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBmaWxlXG4gICAgICBjb25zdCBhZ2VudERhdGEgPSB0aGlzLnBhcnNlQWdlbnRGaWxlKGNvbnRlbnQpO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYWdlbnQgaW5zdGFuY2UgLSBlbnN1cmUgbWV0YWRhdGEgaXMgcGFzc2VkIGNvcnJlY3RseVxuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgQWdlbnQoYWdlbnREYXRhLm1ldGFkYXRhKTtcbiAgICAgIFxuICAgICAgLy8gTG9hZCBzdGF0ZSBpZiBhdmFpbGFibGVcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5sb2FkQWdlbnRTdGF0ZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBhZ2VudC5kZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgLi4uSlNPTi5wYXJzZShhZ2VudC5zZXJpYWxpemUoKSksXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWdlbnQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlYWQgYWdlbnQ6ICR7bmFtZX1gLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFuIGFnZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPEFnZW50TWV0YWRhdGE+LFxuICAgIGNvbnRlbnQ/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5yZWFkKG5hbWUpO1xuICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICBsb2dnZXIud2FybihgQWdlbnQgbm90IGZvdW5kIGZvciB1cGRhdGU6ICR7bmFtZX1gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBtZXRhZGF0YSB1cGRhdGVzXG4gICAgICBpZiAodXBkYXRlcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChcbiAgICAgICAgICBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1cGRhdGVzLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCxcbiAgICAgICAgICA1MDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZXMuc3BlY2lhbGl6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWdlbnQuZXh0ZW5zaW9ucyA9IHtcbiAgICAgICAgICAuLi5hZ2VudC5leHRlbnNpb25zLFxuICAgICAgICAgIHNwZWNpYWxpemF0aW9uczogdXBkYXRlcy5zcGVjaWFsaXphdGlvbnMubWFwKChzOiBzdHJpbmcpID0+IHNhbml0aXplSW5wdXQocywgNTApKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodXBkYXRlcy5kZWNpc2lvbkZyYW1ld29yayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFnZW50LmV4dGVuc2lvbnMgPSB7XG4gICAgICAgICAgLi4uYWdlbnQuZXh0ZW5zaW9ucyxcbiAgICAgICAgICBkZWNpc2lvbkZyYW1ld29yazogdXBkYXRlcy5kZWNpc2lvbkZyYW1ld29ya1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodXBkYXRlcy5yaXNrVG9sZXJhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWdlbnQuZXh0ZW5zaW9ucyA9IHtcbiAgICAgICAgICAuLi5hZ2VudC5leHRlbnNpb25zLFxuICAgICAgICAgIHJpc2tUb2xlcmFuY2U6IHVwZGF0ZXMucmlza1RvbGVyYW5jZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgbW9kaWZpY2F0aW9uIHRpbWVcbiAgICAgIGFnZW50Lm1ldGFkYXRhLm1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAvLyBHZXQgY3VycmVudCBjb250ZW50IGlmIG5vdCBwcm92aWRlZFxuICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RmlsZW5hbWUobmFtZSk7XG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZShmaWxlcGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUFnZW50RmlsZShmaWxlQ29udGVudCk7XG4gICAgICAgIGNvbnRlbnQgPSBwYXJzZWQuY29udGVudDtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBhZ2VudFxuICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKG5hbWUpO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IHRoaXMuc2VyaWFsaXplVG9GaWxlKGFnZW50LCBjb250ZW50KTtcbiAgICAgIFxuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlcGF0aCwgZmlsZUNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAgIC8vIFNhdmUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICBpZiAoYWdlbnQubmVlZHNTdGF0ZVBlcnNpc3RlbmNlKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlQWdlbnRTdGF0ZShuYW1lLCBhZ2VudC5nZXRTdGF0ZSgpKTtcbiAgICAgICAgYWdlbnQubWFya1N0YXRlUGVyc2lzdGVkKCk7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBBZ2VudCB1cGRhdGVkOiAke25hbWV9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdXBkYXRlIGFnZW50OiAke25hbWV9YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gYWdlbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KG5hbWUsIDEwMCk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RmlsZW5hbWUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBjb25zdCBmaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIGZpbGVuYW1lKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaWxlcGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgbWFpbiBmaWxlXG4gICAgICBhd2FpdCBmcy51bmxpbmsoZmlsZXBhdGgpO1xuXG4gICAgICAvLyBEZWxldGUgc3RhdGUgZmlsZSBpZiBleGlzdHNcbiAgICAgIGNvbnN0IHN0YXRlRmlsZW5hbWUgPSBgJHtzYW5pdGl6ZWROYW1lfSR7U1RBVEVfRklMRV9FWFRFTlNJT059YDtcbiAgICAgIGNvbnN0IHN0YXRlRmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBTVEFURV9ESVJFQ1RPUlksIHN0YXRlRmlsZW5hbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZXBhdGgpO1xuICAgICAgICB0aGlzLnN0YXRlQ2FjaGUuZGVsZXRlKHNhbml0aXplZE5hbWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFN0YXRlIGZpbGUgbWlnaHQgbm90IGV4aXN0XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9ERUxFVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBZ2VudE1hbmFnZXIuZGVsZXRlJyxcbiAgICAgICAgZGV0YWlsczogYEFnZW50ICcke3Nhbml0aXplZE5hbWV9JyBkZWxldGVkYFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBBZ2VudCBkZWxldGVkOiAke3Nhbml0aXplZE5hbWV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBhZ2VudDogJHtuYW1lfWAsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBhZ2VudHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0KCk6IFByb21pc2U8QWdlbnRbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5hZ2VudHNQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRmlsdGVyIGZvciBhZ2VudCBmaWxlc1xuICAgICAgY29uc3QgYWdlbnRGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlID0+IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKEFHRU5UX0ZJTEVfRVhURU5TSU9OKSAmJiBcbiAgICAgICAgIWZpbGUuc3RhcnRzV2l0aCgnLicpICYmXG4gICAgICAgIGZpbGUgIT09IFNUQVRFX0RJUkVDVE9SWVxuICAgICAgKTtcblxuICAgICAgLy8gTG9hZCBhbGwgYWdlbnRzXG4gICAgICBjb25zdCBhZ2VudHM6IEFnZW50W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBhZ2VudEZpbGVzKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWxlLnN1YnN0cmluZygwLCBmaWxlLmxlbmd0aCAtIEFHRU5UX0ZJTEVfRVhURU5TSU9OLmxlbmd0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLnJlYWQobmFtZSk7XG4gICAgICAgICAgaWYgKGFnZW50KSB7XG4gICAgICAgICAgICBhZ2VudHMucHVzaChhZ2VudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gbG9hZCBhZ2VudCAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFnZW50cztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIG1pc3NpbmcgZGlyZWN0b3J5IGdyYWNlZnVsbHkgd2l0aCB0eXBlLXNhZmUgY2hlY2tcbiAgICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdjb2RlJyBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0FnZW50cyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgeWV0LCByZXR1cm5pbmcgZW1wdHkgYXJyYXknKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gbGlzdCBhZ2VudHMnLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFnZW50IGV4aXN0c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4aXN0cyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgMTAwKTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuICAgICAgXG4gICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZXBhdGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIGFnZW50IG5hbWVcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZU5hbWUobmFtZTogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFuYW1lIHx8IG5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ05hbWUgY2Fubm90IGJlIGVtcHR5JyB9O1xuICAgIH1cblxuICAgIGlmIChuYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ05hbWUgY2Fubm90IGV4Y2VlZCAxMDAgY2hhcmFjdGVycycgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVFbGVtZW50TmFtZShuYW1lKSkge1xuICAgICAgcmV0dXJuIHsgXG4gICAgICAgIHZhbGlkOiBmYWxzZSwgXG4gICAgICAgIGVycm9yOiAnTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3JlcycgXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuQUdFTlQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhZ2VudCBzdGF0ZSBmcm9tIGZpbGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFnZW50U3RhdGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBZ2VudFN0YXRlIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgICAgaWYgKHRoaXMuc3RhdGVDYWNoZS5oYXMobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVDYWNoZS5nZXQobmFtZSkhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0ZUZpbGVuYW1lID0gYCR7bmFtZX0ke1NUQVRFX0ZJTEVfRVhURU5TSU9OfWA7XG4gICAgICBjb25zdCBzdGF0ZUZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgU1RBVEVfRElSRUNUT1JZLCBzdGF0ZUZpbGVuYW1lKTtcblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZShzdGF0ZUZpbGVwYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBQYXJzZSBZQU1MIHNhZmVseVxuICAgICAgY29uc3QgcGFyc2VkQ29udGVudCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoY29udGVudCwge1xuICAgICAgICBtYXhZYW1sU2l6ZTogTUFYX1lBTUxfU0laRSxcbiAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyc2VkQ29udGVudC5kYXRhIGFzIGFueTtcbiAgICAgIFxuICAgICAgLy8gQ29udmVydCBzdHJpbmcgbnVtYmVycyBiYWNrIHRvIG51bWJlcnNcbiAgICAgIGlmIChzdGF0ZS5zZXNzaW9uQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGF0ZS5zZXNzaW9uQ291bnQgPSBwYXJzZUludChzdGF0ZS5zZXNzaW9uQ291bnQsIDEwKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ29udmVydCBnb2FsIG51bWJlcnNcbiAgICAgIGlmIChzdGF0ZS5nb2Fscykge1xuICAgICAgICBzdGF0ZS5nb2Fscy5mb3JFYWNoKChnb2FsOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZ29hbC5pbXBvcnRhbmNlICE9PSB1bmRlZmluZWQpIGdvYWwuaW1wb3J0YW5jZSA9IHBhcnNlSW50KGdvYWwuaW1wb3J0YW5jZSwgMTApO1xuICAgICAgICAgIGlmIChnb2FsLnVyZ2VuY3kgIT09IHVuZGVmaW5lZCkgZ29hbC51cmdlbmN5ID0gcGFyc2VJbnQoZ29hbC51cmdlbmN5LCAxMCk7XG4gICAgICAgICAgaWYgKGdvYWwuZXN0aW1hdGVkRWZmb3J0ICE9PSB1bmRlZmluZWQpIGdvYWwuZXN0aW1hdGVkRWZmb3J0ID0gcGFyc2VGbG9hdChnb2FsLmVzdGltYXRlZEVmZm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDb252ZXJ0IGRlY2lzaW9uIGNvbmZpZGVuY2VcbiAgICAgIGlmIChzdGF0ZS5kZWNpc2lvbnMpIHtcbiAgICAgICAgc3RhdGUuZGVjaXNpb25zLmZvckVhY2goKGRlY2lzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZGVjaXNpb24uY29uZmlkZW5jZSAhPT0gdW5kZWZpbmVkKSBkZWNpc2lvbi5jb25maWRlbmNlID0gcGFyc2VGbG9hdChkZWNpc2lvbi5jb25maWRlbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIHRoZSBzdGF0ZVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChuYW1lLCBzdGF0ZSk7XG5cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhZ2VudCBzdGF0ZTogJHtuYW1lfWAsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGFnZW50IHN0YXRlIHRvIGZpbGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzYXZlQWdlbnRTdGF0ZShuYW1lOiBzdHJpbmcsIHN0YXRlOiBBZ2VudFN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRlRmlsZW5hbWUgPSBgJHtuYW1lfSR7U1RBVEVfRklMRV9FWFRFTlNJT059YDtcbiAgICAgIGNvbnN0IHN0YXRlRmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBTVEFURV9ESVJFQ1RPUlksIHN0YXRlRmlsZW5hbWUpO1xuXG4gICAgICAvLyBDb252ZXJ0IGRhdGVzIHRvIElTTyBzdHJpbmdzIGFuZCBudW1iZXJzIHRvIHN0cmluZ3MgZm9yIEZBSUxTQUZFX1NDSEVNQVxuICAgICAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbGFzdEFjdGl2ZTogc3RhdGUubGFzdEFjdGl2ZSBpbnN0YW5jZW9mIERhdGUgPyBzdGF0ZS5sYXN0QWN0aXZlLnRvSVNPU3RyaW5nKCkgOiBzdGF0ZS5sYXN0QWN0aXZlLFxuICAgICAgICBzZXNzaW9uQ291bnQ6IFN0cmluZyhzdGF0ZS5zZXNzaW9uQ291bnQpLFxuICAgICAgICBnb2Fsczogc3RhdGUuZ29hbHMubWFwKGdvYWwgPT4gKHtcbiAgICAgICAgICAuLi5nb2FsLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZ29hbC5jcmVhdGVkQXQgaW5zdGFuY2VvZiBEYXRlID8gZ29hbC5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSA6IGdvYWwuY3JlYXRlZEF0LFxuICAgICAgICAgIHVwZGF0ZWRBdDogZ29hbC51cGRhdGVkQXQgaW5zdGFuY2VvZiBEYXRlID8gZ29hbC51cGRhdGVkQXQudG9JU09TdHJpbmcoKSA6IGdvYWwudXBkYXRlZEF0LFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiBnb2FsLmNvbXBsZXRlZEF0IGluc3RhbmNlb2YgRGF0ZSA/IGdvYWwuY29tcGxldGVkQXQudG9JU09TdHJpbmcoKSA6IGdvYWwuY29tcGxldGVkQXQsXG4gICAgICAgICAgaW1wb3J0YW5jZTogZ29hbC5pbXBvcnRhbmNlICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZ29hbC5pbXBvcnRhbmNlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB1cmdlbmN5OiBnb2FsLnVyZ2VuY3kgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhnb2FsLnVyZ2VuY3kpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVzdGltYXRlZEVmZm9ydDogZ29hbC5lc3RpbWF0ZWRFZmZvcnQgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhnb2FsLmVzdGltYXRlZEVmZm9ydCkgOiB1bmRlZmluZWRcbiAgICAgICAgfSkpLFxuICAgICAgICBkZWNpc2lvbnM6IHN0YXRlLmRlY2lzaW9ucy5tYXAoZGVjaXNpb24gPT4gKHtcbiAgICAgICAgICAuLi5kZWNpc2lvbixcbiAgICAgICAgICB0aW1lc3RhbXA6IGRlY2lzaW9uLnRpbWVzdGFtcCBpbnN0YW5jZW9mIERhdGUgPyBkZWNpc2lvbi50aW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IGRlY2lzaW9uLnRpbWVzdGFtcCxcbiAgICAgICAgICBjb25maWRlbmNlOiBkZWNpc2lvbi5jb25maWRlbmNlICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZGVjaXNpb24uY29uZmlkZW5jZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICB9O1xuXG4gICAgICAvLyBDb252ZXJ0IHN0YXRlIHRvIFlBTUxcbiAgICAgIGNvbnN0IHlhbWxDb250ZW50ID0geWFtbC5kdW1wKHNlcmlhbGl6ZWRTdGF0ZSwge1xuICAgICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgIHNvcnRLZXlzOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgc2l6ZVxuICAgICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IE1BWF9ZQU1MX1NJWkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBvZiAke01BWF9ZQU1MX1NJWkV9IGJ5dGVzYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyaXRlIGF0b21pY2FsbHlcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoc3RhdGVGaWxlcGF0aCwgeWFtbENvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgdGhpcy5zdGF0ZUNhY2hlLnNldChuYW1lLCBzdGF0ZSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQWdlbnQgc3RhdGUgc2F2ZWQ6ICR7bmFtZX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSBhZ2VudCBzdGF0ZTogJHtuYW1lfWAsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhZ2VudCBmaWxlIGNvbnRlbnRcbiAgICovXG4gIHByaXZhdGUgcGFyc2VBZ2VudEZpbGUoY29udGVudDogc3RyaW5nKTogQWdlbnRGaWxlRGF0YSB7XG4gICAgLy8gRXh0cmFjdCBmcm9udG1hdHRlciBhbmQgY29udGVudFxuICAgIGNvbnN0IGZyb250bWF0dGVyUmVnZXggPSAvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLVxcbihbXFxzXFxTXSopJC87XG4gICAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKGZyb250bWF0dGVyUmVnZXgpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFnZW50IGZpbGUgZm9ybWF0IC0gbWlzc2luZyBmcm9udG1hdHRlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IFssIGZyb250bWF0dGVyLCBib2R5XSA9IG1hdGNoO1xuXG4gICAgLy8gUGFyc2UgZnJvbnRtYXR0ZXIgLSBTZWN1cmVZYW1sUGFyc2VyIGV4cGVjdHMgZnVsbCBjb250ZW50IHdpdGggZnJvbnRtYXR0ZXIgbWFya2Vyc1xuICAgIC8vIGJ1dCB3ZSdyZSBwYXNzaW5nIGp1c3QgdGhlIFlBTUwgY29udGVudCwgc28gd2UgbmVlZCB0byBwYXJzZSBpdCBkaXJlY3RseVxuICAgIGNvbnN0IHBhcnNlZFlhbWwgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGAtLS1cXG4ke2Zyb250bWF0dGVyfVxcbi0tLWAsIHtcbiAgICAgIG1heFlhbWxTaXplOiBNQVhfWUFNTF9TSVpFLFxuICAgICAgdmFsaWRhdGVDb250ZW50OiBmYWxzZSAgLy8gV2UnbGwgdmFsaWRhdGUgYm9keSBzZXBhcmF0ZWx5XG4gICAgfSk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWRZYW1sLmRhdGEgYXMgdW5rbm93biBhcyBBZ2VudE1ldGFkYXRhO1xuXG4gICAgLy8gVmFsaWRhdGUgdHlwZSBpZiB1c2luZyB0aGUgdHlwZWQgbWV0YWRhdGFcbiAgICBjb25zdCB0eXBlZE1ldGFkYXRhID0gbWV0YWRhdGEgYXMgYW55O1xuICAgIGlmICh0eXBlZE1ldGFkYXRhLnR5cGUgJiYgdHlwZWRNZXRhZGF0YS50eXBlICE9PSBFbGVtZW50VHlwZS5BR0VOVCAmJiB0eXBlZE1ldGFkYXRhLnR5cGUgIT09ICdhZ2VudCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGU6IGV4cGVjdGVkICcke0VsZW1lbnRUeXBlLkFHRU5UfScsIGdvdCAnJHt0eXBlZE1ldGFkYXRhLnR5cGV9J2ApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNvbnRlbnQ6IGJvZHkudHJpbSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgYWdlbnQgdG8gZmlsZSBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplVG9GaWxlKGFnZW50OiBBZ2VudCwgY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhZGF0YTogYW55ID0ge1xuICAgICAgbmFtZTogYWdlbnQubWV0YWRhdGEubmFtZSxcbiAgICAgIHR5cGU6IEVsZW1lbnRUeXBlLkFHRU5ULFxuICAgICAgdmVyc2lvbjogYWdlbnQubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGF1dGhvcjogYWdlbnQubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgY3JlYXRlZDogYWdlbnQubWV0YWRhdGEuY3JlYXRlZCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBtb2RpZmllZDogYWdlbnQubWV0YWRhdGEubW9kaWZpZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZGVzY3JpcHRpb246IGFnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgZGVjaXNpb25GcmFtZXdvcms6IGFnZW50LmV4dGVuc2lvbnM/LmRlY2lzaW9uRnJhbWV3b3JrLFxuICAgICAgcmlza1RvbGVyYW5jZTogYWdlbnQuZXh0ZW5zaW9ucz8ucmlza1RvbGVyYW5jZSxcbiAgICAgIGxlYXJuaW5nRW5hYmxlZDogYWdlbnQuZXh0ZW5zaW9ucz8ubGVhcm5pbmdFbmFibGVkICE9PSB1bmRlZmluZWQgPyBcbiAgICAgICAgU3RyaW5nKGFnZW50LmV4dGVuc2lvbnMubGVhcm5pbmdFbmFibGVkKSA6IHVuZGVmaW5lZCxcbiAgICAgIG1heENvbmN1cnJlbnRHb2FsczogKGFnZW50Lm1ldGFkYXRhIGFzIEFnZW50TWV0YWRhdGEpLm1heENvbmN1cnJlbnRHb2FscyxcbiAgICAgIHNwZWNpYWxpemF0aW9uczogYWdlbnQuZXh0ZW5zaW9ucz8uc3BlY2lhbGl6YXRpb25zXG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgT2JqZWN0LmtleXMobWV0YWRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChtZXRhZGF0YVtrZXkgYXMga2V5b2YgdHlwZW9mIG1ldGFkYXRhXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBtZXRhZGF0YVtrZXkgYXMga2V5b2YgdHlwZW9mIG1ldGFkYXRhXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0geWFtbC5kdW1wKG1ldGFkYXRhLCB7XG4gICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgc29ydEtleXM6IHRydWVcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9LS0tXFxuXFxuJHtjb250ZW50fWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpbGVuYW1lIGZvciBhZ2VudFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaWxlbmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuYW1lfSR7QUdFTlRfRklMRV9FWFRFTlNJT059YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBlbGVtZW50IG5hbWVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVFbGVtZW50TmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBPbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgIHJldHVybiAvXlthLXpBLVowLTlfLV0rJC8udGVzdChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB1c2VyIGZvciBhdHRyaWJ1dGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8ICdhbm9ueW1vdXMnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW4gYWdlbnQgYnkgcHJlZGljYXRlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmluZChwcmVkaWNhdGU6IChlbGVtZW50OiBBZ2VudCkgPT4gYm9vbGVhbik6IFByb21pc2U8QWdlbnQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gYWdlbnRzLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG1hbnkgYWdlbnRzIGJ5IHByZWRpY2F0ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZpbmRNYW55KHByZWRpY2F0ZTogKGVsZW1lbnQ6IEFnZW50KSA9PiBib29sZWFuKTogUHJvbWlzZTxBZ2VudFtdPiB7XG4gICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIGFnZW50cy5maWx0ZXIocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBhZ2VudFxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKGVsZW1lbnQ6IEFnZW50KTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBlbGVtZW50LnZhbGlkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBwYXRoXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVQYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGZvciBwYXRoIHRyYXZlcnNhbFxuICAgIGlmIChwYXRoLmluY2x1ZGVzKCcuLicpIHx8IHBhdGguaW5jbHVkZXMoJ34nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDaGVjayBmb3IgYWJzb2x1dGUgcGF0aHNcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykgfHwgcGF0aC5tYXRjaCgvXltBLVphLXpdOi8pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWxlIGV4dGVuc2lvblxuICAgKi9cbiAgcHVibGljIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQUdFTlRfRklMRV9FWFRFTlNJT047XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGFnZW50IGZyb20gZGF0YVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ/OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nKTogUHJvbWlzZTxBZ2VudD4ge1xuICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHBhcnNlZC5tZXRhZGF0YSk7XG4gICAgICBpZiAocGFyc2VkLnN0YXRlKSB7XG4gICAgICAgIGFnZW50LmRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KHBhcnNlZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQYXJzZSBhcyBtYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICAgIGNvbnN0IGFnZW50RGF0YSA9IHRoaXMucGFyc2VBZ2VudEZpbGUoZGF0YSk7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBBZ2VudChhZ2VudERhdGEubWV0YWRhdGEpO1xuICAgICAgaWYgKGFnZW50RGF0YS5zdGF0ZSkge1xuICAgICAgICBhZ2VudC5kZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgLi4uSlNPTi5wYXJzZShhZ2VudC5zZXJpYWxpemUoKSksXG4gICAgICAgICAgc3RhdGU6IGFnZW50RGF0YS5zdGF0ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWdlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhbiBhZ2VudCB0byBhIGZvcm1hdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4cG9ydEVsZW1lbnQoZWxlbWVudDogQWdlbnQsIGZvcm1hdD86ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4cG9ydCBhcyBtYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBgIyAke2VsZW1lbnQubWV0YWRhdGEubmFtZX1cXG5cXG4ke2VsZW1lbnQubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgJyd9YDtcbiAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVRvRmlsZShlbGVtZW50LCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhbiBhZ2VudCB0byBhIHNwZWNpZmljIHBhdGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzYXZlKGVsZW1lbnQ6IEFnZW50LCB0YXJnZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBuYW1lID0gdGFyZ2V0UGF0aC5yZXBsYWNlKEFHRU5UX0ZJTEVfRVhURU5TSU9OLCAnJyk7XG4gICAgY29uc3QgY29udGVudCA9IGAjICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfVxcblxcbiR7ZWxlbWVudC5tZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ31gO1xuICAgIFxuICAgIC8vIFNhdmUgdGhlIGFnZW50IGZpbGVcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RmlsZW5hbWUobmFtZSk7XG4gICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmlzQWJzb2x1dGUodGFyZ2V0UGF0aCkgPyB0YXJnZXRQYXRoIDogcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gdGhpcy5zZXJpYWxpemVUb0ZpbGUoZWxlbWVudCwgY29udGVudCk7XG4gICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlcGF0aCwgZmlsZUNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAvLyBTYXZlIHN0YXRlIGlmIG5lZWRlZFxuICAgIGlmIChlbGVtZW50Lm5lZWRzU3RhdGVQZXJzaXN0ZW5jZSgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVBZ2VudFN0YXRlKG5hbWUsIGVsZW1lbnQuZ2V0U3RhdGUoKSk7XG4gICAgICBlbGVtZW50Lm1hcmtTdGF0ZVBlcnNpc3RlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGFuIGFnZW50IGZyb20gYSBzcGVjaWZpYyBwYXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEFnZW50PiB7XG4gICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLnJlYWQodGFyZ2V0UGF0aC5yZXBsYWNlKEFHRU5UX0ZJTEVfRVhURU5TSU9OLCAnJykpO1xuICAgIGlmICghYWdlbnQpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMjA2OiBEb24ndCBleHBvc2UgZmlsZSBwYXRocyBpbiBlcnJvciBtZXNzYWdlc1xuICAgICAgbG9nZ2VyLmVycm9yKCdBZ2VudCBub3QgZm91bmQnLCB7IHBhdGg6IHRhcmdldFBhdGggfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FnZW50IG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYWdlbnQ7XG4gIH1cbn0iXX0=
|
|
615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsWUFBWTtBQUNaLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUMzQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUTtBQUMxQyxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsdUJBQXVCO0FBZXhELE1BQU0sT0FBTyxZQUFZO0lBQ04sVUFBVSxDQUFTO0lBQ25CLFVBQVUsR0FBNEIsSUFBSSxHQUFHLEVBQUUsQ0FB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Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnRNYW5hZ2VyIC0gSGFuZGxlcyBDUlVEIG9wZXJhdGlvbnMgZm9yIEFnZW50IGVsZW1lbnRzXG4gKiBGb2xsb3dzIHBhdHRlcm5zIGZyb20gUGVyc29uYUVsZW1lbnRNYW5hZ2VyIGFuZCBNZW1vcnlNYW5hZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZOiBVc2VzIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIG9wZXJhdGlvbnMgYW5kIFNlY3VyZVlhbWxQYXJzZXIgZm9yIHNhZmUgWUFNTCBwYXJzaW5nXG4gKi9cblxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuL0FnZW50LmpzJztcbmltcG9ydCB7IEFnZW50TWV0YWRhdGEsIEFnZW50U3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IElFbGVtZW50TWFuYWdlciwgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9pbmRleC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vLyBDb25zdGFudHNcbmNvbnN0IEFHRU5UX0ZJTEVfRVhURU5TSU9OID0gJy5tZCc7XG5jb25zdCBTVEFURV9ESVJFQ1RPUlkgPSAnLnN0YXRlJztcbmNvbnN0IFNUQVRFX0ZJTEVfRVhURU5TSU9OID0gJy5zdGF0ZS55YW1sJztcbmNvbnN0IE1BWF9GSUxFX1NJWkUgPSAxMDAgKiAxMDI0OyAvLyAxMDBLQlxuY29uc3QgTUFYX1lBTUxfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRLQiBmb3IgZnJvbnRtYXR0ZXJcblxuLy8gRWxlbWVudCBjcmVhdGlvbiByZXN1bHQgaW50ZXJmYWNlXG5pbnRlcmZhY2UgRWxlbWVudENyZWF0aW9uUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBlbGVtZW50PzogQWdlbnQ7XG59XG5cbmludGVyZmFjZSBBZ2VudEZpbGVEYXRhIHtcbiAgbWV0YWRhdGE6IEFnZW50TWV0YWRhdGE7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc3RhdGU/OiBBZ2VudFN0YXRlO1xufVxuXG5leHBvcnQgY2xhc3MgQWdlbnRNYW5hZ2VyIGltcGxlbWVudHMgSUVsZW1lbnRNYW5hZ2VyPEFnZW50PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWdlbnRzUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlQ2FjaGU6IE1hcDxzdHJpbmcsIEFnZW50U3RhdGU+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHBvcnRmb2xpb1BhdGg6IHN0cmluZykge1xuICAgIHRoaXMuYWdlbnRzUGF0aCA9IHBhdGguam9pbihwb3J0Zm9saW9QYXRoLCBFbGVtZW50VHlwZS5BR0VOVCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYWdlbnRzIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYWdlbnRzIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLmFnZW50c1BhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgLnN0YXRlIGRpcmVjdG9yeSBmb3IgYWdlbnQgc3RhdGVzXG4gICAgICBjb25zdCBzdGF0ZVBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBTVEFURV9ESVJFQ1RPUlkpO1xuICAgICAgYXdhaXQgZnMubWtkaXIoc3RhdGVQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0FnZW50TWFuYWdlciBpbml0aWFsaXplZCcsIHsgcGF0aDogdGhpcy5hZ2VudHNQYXRoIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIEFnZW50TWFuYWdlcicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYWdlbnRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIG1ldGFkYXRhPzogUGFydGlhbDxBZ2VudE1ldGFkYXRhPlxuICApOiBQcm9taXNlPEVsZW1lbnRDcmVhdGlvblJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBTYW5pdGl6ZSBpbnB1dHNcbiAgICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApO1xuICAgICAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgNTAwKTtcbiAgICAgIGNvbnN0IHNhbml0aXplZENvbnRlbnQgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpLm5vcm1hbGl6ZWRDb250ZW50LCA1MDAwMCk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIG5hbWVcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUVsZW1lbnROYW1lKHNhbml0aXplZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgYWdlbnQgbmFtZS4gVXNlIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzLidcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgYWdlbnQgYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgYWdlbnQgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgICAgbmFtZTogc2FuaXRpemVkTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNhbml0aXplZERlc2NyaXB0aW9uLFxuICAgICAgICAuLi5tZXRhZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCBhdXRob3JcbiAgICAgIGFnZW50Lm1ldGFkYXRhLmF1dGhvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpO1xuXG4gICAgICAvLyBQcmVwYXJlIGZpbGUgY29udGVudFxuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSB0aGlzLnNlcmlhbGl6ZVRvRmlsZShhZ2VudCwgc2FuaXRpemVkQ29udGVudCk7XG5cbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIGF0b21pYyBmaWxlIGNyZWF0aW9uIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBVc2VkIGFjY2VzcygpIGNoZWNrIGZvbGxvd2VkIGJ5IHdyaXRlLCB3aGljaCBjb3VsZCByYWNlXG4gICAgICAvLyBOb3c6IFVzZSBleGNsdXNpdmUgZmlsZSBjcmVhdGlvbiB0aGF0IGZhaWxzIGF0b21pY2FsbHkgaWYgZmlsZSBleGlzdHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZkID0gYXdhaXQgZnMub3BlbihmaWxlcGF0aCwgJ3d4Jyk7IC8vICd3eCcgPSBleGNsdXNpdmUgd3JpdGUsIGZhaWxzIGlmIGV4aXN0c1xuICAgICAgICBhd2FpdCBmZC53cml0ZUZpbGUoZmlsZUNvbnRlbnQsICd1dGYtOCcpO1xuICAgICAgICBhd2FpdCBmZC5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VFWElTVCcpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQWdlbnQgJyR7c2FuaXRpemVkTmFtZX0nIGFscmVhZHkgZXhpc3RzYFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdBZ2VudE1hbmFnZXIuY3JlYXRlJyxcbiAgICAgICAgZGV0YWlsczogYEFnZW50ICcke3Nhbml0aXplZE5hbWV9JyBjcmVhdGVkYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgYWdlbnRJZDogYWdlbnQuaWQgfVxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKGBBZ2VudCBjcmVhdGVkOiAke3Nhbml0aXplZE5hbWV9YCk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6IGDwn6SWICoqJHtzYW5pdGl6ZWROYW1lfSoqIGJ5ICR7YWdlbnQubWV0YWRhdGEuYXV0aG9yIHx8ICdhbm9ueW1vdXMnfWAsXG4gICAgICAgIGVsZW1lbnQ6IGFnZW50XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYWdlbnQnLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGNyZWF0ZSBhZ2VudCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgYW4gYWdlbnQgYnkgbmFtZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBZ2VudCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgMTAwKTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuXG4gICAgICAvLyBSZWFkIGZpbGUgd2l0aCBsb2NrXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKGZpbGVwYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBmaWxlIHNpemVcbiAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IE1BWF9GSUxFX1NJWkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZ2VudCBmaWxlIGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7TUFYX0ZJTEVfU0laRX0gYnl0ZXNgKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgZmlsZVxuICAgICAgY29uc3QgYWdlbnREYXRhID0gdGhpcy5wYXJzZUFnZW50RmlsZShjb250ZW50KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGFnZW50IGluc3RhbmNlIC0gZW5zdXJlIG1ldGFkYXRhIGlzIHBhc3NlZCBjb3JyZWN0bHlcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KGFnZW50RGF0YS5tZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIExvYWQgc3RhdGUgaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMubG9hZEFnZW50U3RhdGUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgYWdlbnQuZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLkpTT04ucGFyc2UoYWdlbnQuc2VyaWFsaXplKCkpLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZWFkIGFnZW50OiAke25hbWV9YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBhZ2VudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxBZ2VudE1ldGFkYXRhPixcbiAgICBjb250ZW50Pzogc3RyaW5nXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMucmVhZChuYW1lKTtcbiAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEFnZW50IG5vdCBmb3VuZCBmb3IgdXBkYXRlOiAke25hbWV9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbWV0YWRhdGEgdXBkYXRlc1xuICAgICAgaWYgKHVwZGF0ZXMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoXG4gICAgICAgICAgVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodXBkYXRlcy5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsXG4gICAgICAgICAgNTAwXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGRhdGVzLnNwZWNpYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFnZW50LmV4dGVuc2lvbnMgPSB7XG4gICAgICAgICAgLi4uYWdlbnQuZXh0ZW5zaW9ucyxcbiAgICAgICAgICBzcGVjaWFsaXphdGlvbnM6IHVwZGF0ZXMuc3BlY2lhbGl6YXRpb25zLm1hcCgoczogc3RyaW5nKSA9PiBzYW5pdGl6ZUlucHV0KHMsIDUwKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZXMuZGVjaXNpb25GcmFtZXdvcmsgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhZ2VudC5leHRlbnNpb25zID0ge1xuICAgICAgICAgIC4uLmFnZW50LmV4dGVuc2lvbnMsXG4gICAgICAgICAgZGVjaXNpb25GcmFtZXdvcms6IHVwZGF0ZXMuZGVjaXNpb25GcmFtZXdvcmtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwZGF0ZXMucmlza1RvbGVyYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFnZW50LmV4dGVuc2lvbnMgPSB7XG4gICAgICAgICAgLi4uYWdlbnQuZXh0ZW5zaW9ucyxcbiAgICAgICAgICByaXNrVG9sZXJhbmNlOiB1cGRhdGVzLnJpc2tUb2xlcmFuY2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIG1vZGlmaWNhdGlvbiB0aW1lXG4gICAgICBhZ2VudC5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgICAgLy8gR2V0IGN1cnJlbnQgY29udGVudCBpZiBub3QgcHJvdmlkZWRcbiAgICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKG5hbWUpO1xuICAgICAgICBjb25zdCBmaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoZmlsZXBhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VBZ2VudEZpbGUoZmlsZUNvbnRlbnQpO1xuICAgICAgICBjb250ZW50ID0gcGFyc2VkLmNvbnRlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmUgYWdlbnRcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5nZXRGaWxlbmFtZShuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSB0aGlzLnNlcmlhbGl6ZVRvRmlsZShhZ2VudCwgY29udGVudCk7XG4gICAgICBcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZXBhdGgsIGZpbGVDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBTYXZlIHN0YXRlIGlmIG5lZWRlZFxuICAgICAgaWYgKGFnZW50Lm5lZWRzU3RhdGVQZXJzaXN0ZW5jZSgpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUFnZW50U3RhdGUobmFtZSwgYWdlbnQuZ2V0U3RhdGUoKSk7XG4gICAgICAgIGFnZW50Lm1hcmtTdGF0ZVBlcnNpc3RlZCgpO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgQWdlbnQgdXBkYXRlZDogJHtuYW1lfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBhZ2VudDogJHtuYW1lfWAsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGFnZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCAxMDApO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKHNhbml0aXplZE5hbWUpO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5hZ2VudHNQYXRoLCBmaWxlbmFtZSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZXBhdGgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIG1haW4gZmlsZVxuICAgICAgYXdhaXQgZnMudW5saW5rKGZpbGVwYXRoKTtcblxuICAgICAgLy8gRGVsZXRlIHN0YXRlIGZpbGUgaWYgZXhpc3RzXG4gICAgICBjb25zdCBzdGF0ZUZpbGVuYW1lID0gYCR7c2FuaXRpemVkTmFtZX0ke1NUQVRFX0ZJTEVfRVhURU5TSU9OfWA7XG4gICAgICBjb25zdCBzdGF0ZUZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgU1RBVEVfRElSRUNUT1JZLCBzdGF0ZUZpbGVuYW1lKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhzdGF0ZUZpbGVwYXRoKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNhY2hlLmRlbGV0ZShzYW5pdGl6ZWROYW1lKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTdGF0ZSBmaWxlIG1pZ2h0IG5vdCBleGlzdFxuICAgICAgfVxuXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfREVMRVRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnQWdlbnRNYW5hZ2VyLmRlbGV0ZScsXG4gICAgICAgIGRldGFpbHM6IGBBZ2VudCAnJHtzYW5pdGl6ZWROYW1lfScgZGVsZXRlZGBcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgQWdlbnQgZGVsZXRlZDogJHtzYW5pdGl6ZWROYW1lfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgYWdlbnQ6ICR7bmFtZX1gLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgYWdlbnRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEFnZW50W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuYWdlbnRzUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIEZpbHRlciBmb3IgYWdlbnQgZmlsZXNcbiAgICAgIGNvbnN0IGFnZW50RmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBcbiAgICAgICAgZmlsZS5lbmRzV2l0aChBR0VOVF9GSUxFX0VYVEVOU0lPTikgJiYgXG4gICAgICAgICFmaWxlLnN0YXJ0c1dpdGgoJy4nKSAmJlxuICAgICAgICBmaWxlICE9PSBTVEFURV9ESVJFQ1RPUllcbiAgICAgICk7XG5cbiAgICAgIC8vIExvYWQgYWxsIGFnZW50c1xuICAgICAgY29uc3QgYWdlbnRzOiBBZ2VudFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgYWdlbnRGaWxlcykge1xuICAgICAgICBjb25zdCBuYW1lID0gZmlsZS5zdWJzdHJpbmcoMCwgZmlsZS5sZW5ndGggLSBBR0VOVF9GSUxFX0VYVEVOU0lPTi5sZW5ndGgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5yZWFkKG5hbWUpO1xuICAgICAgICAgIGlmIChhZ2VudCkge1xuICAgICAgICAgICAgYWdlbnRzLnB1c2goYWdlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGxvYWQgYWdlbnQgJHtuYW1lfTpgLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhZ2VudHM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBtaXNzaW5nIGRpcmVjdG9yeSBncmFjZWZ1bGx5IHdpdGggdHlwZS1zYWZlIGNoZWNrXG4gICAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnY29kZScgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdBZ2VudHMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCwgcmV0dXJuaW5nIGVtcHR5IGFycmF5Jyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxpc3QgYWdlbnRzJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZ2VudCBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleGlzdHMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZUlucHV0KG5hbWUsIDEwMCk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RmlsZW5hbWUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBjb25zdCBmaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVwYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBhZ2VudCBuYW1lXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVOYW1lKG5hbWU6IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdOYW1lIGNhbm5vdCBiZSBlbXB0eScgfTtcbiAgICB9XG5cbiAgICBpZiAobmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdOYW1lIGNhbm5vdCBleGNlZWQgMTAwIGNoYXJhY3RlcnMnIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRWxlbWVudE5hbWUobmFtZSkpIHtcbiAgICAgIHJldHVybiB7IFxuICAgICAgICB2YWxpZDogZmFsc2UsIFxuICAgICAgICBlcnJvcjogJ05hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMnIFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXRFbGVtZW50VHlwZSgpOiBFbGVtZW50VHlwZSB7XG4gICAgcmV0dXJuIEVsZW1lbnRUeXBlLkFHRU5UO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYWdlbnQgc3RhdGUgZnJvbSBmaWxlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRBZ2VudFN0YXRlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QWdlbnRTdGF0ZSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICAgIGlmICh0aGlzLnN0YXRlQ2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlQ2FjaGUuZ2V0KG5hbWUpITtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdGVGaWxlbmFtZSA9IGAke25hbWV9JHtTVEFURV9GSUxFX0VYVEVOU0lPTn1gO1xuICAgICAgY29uc3Qgc3RhdGVGaWxlcGF0aCA9IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIFNUQVRFX0RJUkVDVE9SWSwgc3RhdGVGaWxlbmFtZSk7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoc3RhdGVGaWxlcGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gUGFyc2UgWUFNTCBzYWZlbHlcbiAgICAgIGNvbnN0IHBhcnNlZENvbnRlbnQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQsIHtcbiAgICAgICAgbWF4WWFtbFNpemU6IE1BWF9ZQU1MX1NJWkUsXG4gICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcnNlZENvbnRlbnQuZGF0YSBhcyBhbnk7XG4gICAgICBcbiAgICAgIC8vIENvbnZlcnQgc3RyaW5nIG51bWJlcnMgYmFjayB0byBudW1iZXJzXG4gICAgICBpZiAoc3RhdGUuc2Vzc2lvbkNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RhdGUuc2Vzc2lvbkNvdW50ID0gcGFyc2VJbnQoc3RhdGUuc2Vzc2lvbkNvdW50LCAxMCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENvbnZlcnQgZ29hbCBudW1iZXJzXG4gICAgICBpZiAoc3RhdGUuZ29hbHMpIHtcbiAgICAgICAgc3RhdGUuZ29hbHMuZm9yRWFjaCgoZ29hbDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGdvYWwuaW1wb3J0YW5jZSAhPT0gdW5kZWZpbmVkKSBnb2FsLmltcG9ydGFuY2UgPSBwYXJzZUludChnb2FsLmltcG9ydGFuY2UsIDEwKTtcbiAgICAgICAgICBpZiAoZ29hbC51cmdlbmN5ICE9PSB1bmRlZmluZWQpIGdvYWwudXJnZW5jeSA9IHBhcnNlSW50KGdvYWwudXJnZW5jeSwgMTApO1xuICAgICAgICAgIGlmIChnb2FsLmVzdGltYXRlZEVmZm9ydCAhPT0gdW5kZWZpbmVkKSBnb2FsLmVzdGltYXRlZEVmZm9ydCA9IHBhcnNlRmxvYXQoZ29hbC5lc3RpbWF0ZWRFZmZvcnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ29udmVydCBkZWNpc2lvbiBjb25maWRlbmNlXG4gICAgICBpZiAoc3RhdGUuZGVjaXNpb25zKSB7XG4gICAgICAgIHN0YXRlLmRlY2lzaW9ucy5mb3JFYWNoKChkZWNpc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmNvbmZpZGVuY2UgIT09IHVuZGVmaW5lZCkgZGVjaXNpb24uY29uZmlkZW5jZSA9IHBhcnNlRmxvYXQoZGVjaXNpb24uY29uZmlkZW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWNoZSB0aGUgc3RhdGVcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQobmFtZSwgc3RhdGUpO1xuXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgYWdlbnQgc3RhdGU6ICR7bmFtZX1gLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhZ2VudCBzdGF0ZSB0byBmaWxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZUFnZW50U3RhdGUobmFtZTogc3RyaW5nLCBzdGF0ZTogQWdlbnRTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0ZUZpbGVuYW1lID0gYCR7bmFtZX0ke1NUQVRFX0ZJTEVfRVhURU5TSU9OfWA7XG4gICAgICBjb25zdCBzdGF0ZUZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMuYWdlbnRzUGF0aCwgU1RBVEVfRElSRUNUT1JZLCBzdGF0ZUZpbGVuYW1lKTtcblxuICAgICAgLy8gQ29udmVydCBkYXRlcyB0byBJU08gc3RyaW5ncyBhbmQgbnVtYmVycyB0byBzdHJpbmdzIGZvciBGQUlMU0FGRV9TQ0hFTUFcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxhc3RBY3RpdmU6IHN0YXRlLmxhc3RBY3RpdmUgaW5zdGFuY2VvZiBEYXRlID8gc3RhdGUubGFzdEFjdGl2ZS50b0lTT1N0cmluZygpIDogc3RhdGUubGFzdEFjdGl2ZSxcbiAgICAgICAgc2Vzc2lvbkNvdW50OiBTdHJpbmcoc3RhdGUuc2Vzc2lvbkNvdW50KSxcbiAgICAgICAgZ29hbHM6IHN0YXRlLmdvYWxzLm1hcChnb2FsID0+ICh7XG4gICAgICAgICAgLi4uZ29hbCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IGdvYWwuY3JlYXRlZEF0IGluc3RhbmNlb2YgRGF0ZSA/IGdvYWwuY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCkgOiBnb2FsLmNyZWF0ZWRBdCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IGdvYWwudXBkYXRlZEF0IGluc3RhbmNlb2YgRGF0ZSA/IGdvYWwudXBkYXRlZEF0LnRvSVNPU3RyaW5nKCkgOiBnb2FsLnVwZGF0ZWRBdCxcbiAgICAgICAgICBjb21wbGV0ZWRBdDogZ29hbC5jb21wbGV0ZWRBdCBpbnN0YW5jZW9mIERhdGUgPyBnb2FsLmNvbXBsZXRlZEF0LnRvSVNPU3RyaW5nKCkgOiBnb2FsLmNvbXBsZXRlZEF0LFxuICAgICAgICAgIGltcG9ydGFuY2U6IGdvYWwuaW1wb3J0YW5jZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKGdvYWwuaW1wb3J0YW5jZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXJnZW5jeTogZ29hbC51cmdlbmN5ICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZ29hbC51cmdlbmN5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBlc3RpbWF0ZWRFZmZvcnQ6IGdvYWwuZXN0aW1hdGVkRWZmb3J0ICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZ29hbC5lc3RpbWF0ZWRFZmZvcnQpIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGVjaXNpb25zOiBzdGF0ZS5kZWNpc2lvbnMubWFwKGRlY2lzaW9uID0+ICh7XG4gICAgICAgICAgLi4uZGVjaXNpb24sXG4gICAgICAgICAgdGltZXN0YW1wOiBkZWNpc2lvbi50aW1lc3RhbXAgaW5zdGFuY2VvZiBEYXRlID8gZGVjaXNpb24udGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiBkZWNpc2lvbi50aW1lc3RhbXAsXG4gICAgICAgICAgY29uZmlkZW5jZTogZGVjaXNpb24uY29uZmlkZW5jZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKGRlY2lzaW9uLmNvbmZpZGVuY2UpIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgLy8gQ29udmVydCBzdGF0ZSB0byBZQU1MXG4gICAgICBjb25zdCB5YW1sQ29udGVudCA9IHlhbWwuZHVtcChzZXJpYWxpemVkU3RhdGUsIHtcbiAgICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSxcbiAgICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgICBzb3J0S2V5czogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHNpemVcbiAgICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiBNQVhfWUFNTF9TSVpFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgc2l6ZSBleGNlZWRzIG1heGltdW0gb2YgJHtNQVhfWUFNTF9TSVpFfSBieXRlc2ApO1xuICAgICAgfVxuXG4gICAgICAvLyBXcml0ZSBhdG9taWNhbGx5XG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKHN0YXRlRmlsZXBhdGgsIHlhbWxDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQobmFtZSwgc3RhdGUpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYEFnZW50IHN0YXRlIHNhdmVkOiAke25hbWV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNhdmUgYWdlbnQgc3RhdGU6ICR7bmFtZX1gLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYWdlbnQgZmlsZSBjb250ZW50XG4gICAqL1xuICBwcml2YXRlIHBhcnNlQWdlbnRGaWxlKGNvbnRlbnQ6IHN0cmluZyk6IEFnZW50RmlsZURhdGEge1xuICAgIC8vIEV4dHJhY3QgZnJvbnRtYXR0ZXIgYW5kIGNvbnRlbnRcbiAgICBjb25zdCBmcm9udG1hdHRlclJlZ2V4ID0gL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS1cXG4oW1xcc1xcU10qKSQvO1xuICAgIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChmcm9udG1hdHRlclJlZ2V4KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhZ2VudCBmaWxlIGZvcm1hdCAtIG1pc3NpbmcgZnJvbnRtYXR0ZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBmcm9udG1hdHRlciwgYm9keV0gPSBtYXRjaDtcblxuICAgIC8vIFBhcnNlIGZyb250bWF0dGVyIC0gU2VjdXJlWWFtbFBhcnNlciBleHBlY3RzIGZ1bGwgY29udGVudCB3aXRoIGZyb250bWF0dGVyIG1hcmtlcnNcbiAgICAvLyBidXQgd2UncmUgcGFzc2luZyBqdXN0IHRoZSBZQU1MIGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gcGFyc2UgaXQgZGlyZWN0bHlcbiAgICBjb25zdCBwYXJzZWRZYW1sID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZShgLS0tXFxuJHtmcm9udG1hdHRlcn1cXG4tLS1gLCB7XG4gICAgICBtYXhZYW1sU2l6ZTogTUFYX1lBTUxfU0laRSxcbiAgICAgIHZhbGlkYXRlQ29udGVudDogZmFsc2UgIC8vIFdlJ2xsIHZhbGlkYXRlIGJvZHkgc2VwYXJhdGVseVxuICAgIH0pO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkWWFtbC5kYXRhIGFzIHVua25vd24gYXMgQWdlbnRNZXRhZGF0YTtcblxuICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgdXNpbmcgdGhlIHR5cGVkIG1ldGFkYXRhXG4gICAgY29uc3QgdHlwZWRNZXRhZGF0YSA9IG1ldGFkYXRhIGFzIGFueTtcbiAgICBpZiAodHlwZWRNZXRhZGF0YS50eXBlICYmIHR5cGVkTWV0YWRhdGEudHlwZSAhPT0gRWxlbWVudFR5cGUuQUdFTlQgJiYgdHlwZWRNZXRhZGF0YS50eXBlICE9PSAnYWdlbnQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiBleHBlY3RlZCAnJHtFbGVtZW50VHlwZS5BR0VOVH0nLCBnb3QgJyR7dHlwZWRNZXRhZGF0YS50eXBlfSdgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWV0YWRhdGEsXG4gICAgICBjb250ZW50OiBib2R5LnRyaW0oKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIGFnZW50IHRvIGZpbGUgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHNlcmlhbGl6ZVRvRmlsZShhZ2VudDogQWdlbnQsIGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YWRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IGFnZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICB0eXBlOiBFbGVtZW50VHlwZS5BR0VOVCxcbiAgICAgIHZlcnNpb246IGFnZW50Lm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICBhdXRob3I6IGFnZW50Lm1ldGFkYXRhLmF1dGhvcixcbiAgICAgIGNyZWF0ZWQ6IGFnZW50Lm1ldGFkYXRhLmNyZWF0ZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbW9kaWZpZWQ6IGFnZW50Lm1ldGFkYXRhLm1vZGlmaWVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBhZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIGRlY2lzaW9uRnJhbWV3b3JrOiBhZ2VudC5leHRlbnNpb25zPy5kZWNpc2lvbkZyYW1ld29yayxcbiAgICAgIHJpc2tUb2xlcmFuY2U6IGFnZW50LmV4dGVuc2lvbnM/LnJpc2tUb2xlcmFuY2UsXG4gICAgICBsZWFybmluZ0VuYWJsZWQ6IGFnZW50LmV4dGVuc2lvbnM/LmxlYXJuaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gXG4gICAgICAgIFN0cmluZyhhZ2VudC5leHRlbnNpb25zLmxlYXJuaW5nRW5hYmxlZCkgOiB1bmRlZmluZWQsXG4gICAgICBtYXhDb25jdXJyZW50R29hbHM6IChhZ2VudC5tZXRhZGF0YSBhcyBBZ2VudE1ldGFkYXRhKS5tYXhDb25jdXJyZW50R29hbHMsXG4gICAgICBzcGVjaWFsaXphdGlvbnM6IGFnZW50LmV4dGVuc2lvbnM/LnNwZWNpYWxpemF0aW9uc1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgdW5kZWZpbmVkIHZhbHVlc1xuICAgIE9iamVjdC5rZXlzKG1ldGFkYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobWV0YWRhdGFba2V5IGFzIGtleW9mIHR5cGVvZiBtZXRhZGF0YV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgbWV0YWRhdGFba2V5IGFzIGtleW9mIHR5cGVvZiBtZXRhZGF0YV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB5YW1sQ29udGVudCA9IHlhbWwuZHVtcChtZXRhZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSxcbiAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgIHNvcnRLZXlzOiB0cnVlXG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxDb250ZW50fS0tLVxcblxcbiR7Y29udGVudH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWxlbmFtZSBmb3IgYWdlbnRcbiAgICovXG4gIHByaXZhdGUgZ2V0RmlsZW5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmFtZX0ke0FHRU5UX0ZJTEVfRVhURU5TSU9OfWA7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBuYW1lXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudE5hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gT25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXNcbiAgICByZXR1cm4gL15bYS16QS1aMC05Xy1dKyQvLnRlc3QobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciBmb3IgYXR0cmlidXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCAnYW5vbnltb3VzJztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFuIGFnZW50IGJ5IHByZWRpY2F0ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogQWdlbnQpID0+IGJvb2xlYW4pOiBQcm9taXNlPEFnZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYWdlbnRzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIGFnZW50cy5maW5kKHByZWRpY2F0ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtYW55IGFnZW50cyBieSBwcmVkaWNhdGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6IChlbGVtZW50OiBBZ2VudCkgPT4gYm9vbGVhbik6IFByb21pc2U8QWdlbnRbXT4ge1xuICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiBhZ2VudHMuZmlsdGVyKHByZWRpY2F0ZSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW4gYWdlbnRcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZShlbGVtZW50OiBBZ2VudCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcGF0aFxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBmb3IgcGF0aCB0cmF2ZXJzYWxcbiAgICBpZiAocGF0aC5pbmNsdWRlcygnLi4nKSB8fCBwYXRoLmluY2x1ZGVzKCd+JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZm9yIGFic29sdXRlIHBhdGhzXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpIHx8IHBhdGgubWF0Y2goL15bQS1aYS16XTovKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBleHRlbnNpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGaWxlRXh0ZW5zaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFHRU5UX0ZJTEVfRVhURU5TSU9OO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBhZ2VudCBmcm9tIGRhdGFcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRFbGVtZW50KGRhdGE6IHN0cmluZywgZm9ybWF0PzogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyk6IFByb21pc2U8QWdlbnQ+IHtcbiAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBBZ2VudChwYXJzZWQubWV0YWRhdGEpO1xuICAgICAgaWYgKHBhcnNlZC5zdGF0ZSkge1xuICAgICAgICBhZ2VudC5kZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeShwYXJzZWQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZ2VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyc2UgYXMgbWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyXG4gICAgICBjb25zdCBhZ2VudERhdGEgPSB0aGlzLnBhcnNlQWdlbnRGaWxlKGRhdGEpO1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgQWdlbnQoYWdlbnREYXRhLm1ldGFkYXRhKTtcbiAgICAgIGlmIChhZ2VudERhdGEuc3RhdGUpIHtcbiAgICAgICAgYWdlbnQuZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLkpTT04ucGFyc2UoYWdlbnQuc2VyaWFsaXplKCkpLFxuICAgICAgICAgIHN0YXRlOiBhZ2VudERhdGEuc3RhdGVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFnZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYW4gYWdlbnQgdG8gYSBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleHBvcnRFbGVtZW50KGVsZW1lbnQ6IEFnZW50LCBmb3JtYXQ/OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFeHBvcnQgYXMgbWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyXG4gICAgICBjb25zdCBjb250ZW50ID0gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVUb0ZpbGUoZWxlbWVudCwgY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYW4gYWdlbnQgdG8gYSBzcGVjaWZpYyBwYXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZShlbGVtZW50OiBBZ2VudCwgdGFyZ2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldFBhdGgucmVwbGFjZShBR0VOVF9GSUxFX0VYVEVOU0lPTiwgJycpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBgIyAke2VsZW1lbnQubWV0YWRhdGEubmFtZX1cXG5cXG4ke2VsZW1lbnQubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgJyd9YDtcbiAgICBcbiAgICAvLyBTYXZlIHRoZSBhZ2VudCBmaWxlXG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVuYW1lKG5hbWUpO1xuICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5pc0Fic29sdXRlKHRhcmdldFBhdGgpID8gdGFyZ2V0UGF0aCA6IHBhdGguam9pbih0aGlzLmFnZW50c1BhdGgsIGZpbGVuYW1lKTtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHRoaXMuc2VyaWFsaXplVG9GaWxlKGVsZW1lbnQsIGNvbnRlbnQpO1xuICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZXBhdGgsIGZpbGVDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgLy8gU2F2ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICBpZiAoZWxlbWVudC5uZWVkc1N0YXRlUGVyc2lzdGVuY2UoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlQWdlbnRTdGF0ZShuYW1lLCBlbGVtZW50LmdldFN0YXRlKCkpO1xuICAgICAgZWxlbWVudC5tYXJrU3RhdGVQZXJzaXN0ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbiBhZ2VudCBmcm9tIGEgc3BlY2lmaWMgcGF0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWQodGFyZ2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxBZ2VudD4ge1xuICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5yZWFkKHRhcmdldFBhdGgucmVwbGFjZShBR0VOVF9GSUxFX0VYVEVOU0lPTiwgJycpKTtcbiAgICBpZiAoIWFnZW50KSB7XG4gICAgICAvLyBTRUNVUklUWSBGSVggIzIwNjogRG9uJ3QgZXhwb3NlIGZpbGUgcGF0aHMgaW4gZXJyb3IgbWVzc2FnZXNcbiAgICAgIGxvZ2dlci5lcnJvcignQWdlbnQgbm90IGZvdW5kJywgeyBwYXRoOiB0YXJnZXRQYXRoIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZ2VudCBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFnZW50O1xuICB9XG59Il19
|
package/dist/elements/index.d.ts
CHANGED
|
@@ -6,6 +6,4 @@ export * from './FeedbackProcessor.js';
|
|
|
6
6
|
export * from './agents/index.js';
|
|
7
7
|
export * from './templates/index.js';
|
|
8
8
|
export * from './skills/index.js';
|
|
9
|
-
export * from './memories/index.js';
|
|
10
|
-
export * from './ensembles/index.js';
|
|
11
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
|
package/dist/elements/index.js
CHANGED
|
@@ -7,6 +7,4 @@ export * from './FeedbackProcessor.js';
|
|
|
7
7
|
export * from './agents/index.js';
|
|
8
8
|
export * from './templates/index.js';
|
|
9
9
|
export * from './skills/index.js';
|
|
10
|
-
|
|
11
|
-
export * from './ensembles/index.js';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsdUJBQXVCO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbCBleHBvcnQgZm9yIGVsZW1lbnQgaW1wbGVtZW50YXRpb25zLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vQmFzZUVsZW1lbnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GZWVkYmFja1Byb2Nlc3Nvci5qcyc7XG5cbi8vIEVsZW1lbnQgdHlwZSBleHBvcnRzXG5leHBvcnQgKiBmcm9tICcuL2FnZW50cy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlcy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NraWxscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9yaWVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW5zZW1ibGVzL2luZGV4LmpzJzsiXX0=
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsdUJBQXVCO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsIGV4cG9ydCBmb3IgZWxlbWVudCBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9CYXNlRWxlbWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0ZlZWRiYWNrUHJvY2Vzc29yLmpzJztcblxuLy8gRWxlbWVudCB0eXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vYWdlbnRzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVtcGxhdGVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2tpbGxzL2luZGV4LmpzJzsiXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAQpG,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,KAAM,SAAQ,WAAY,YAAW,QAAQ;IACzC,QAAQ,EAAE,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,GAAE,MAAW;
|
|
1
|
+
{"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAQpG,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,KAAM,SAAQ,WAAY,YAAW,QAAQ;IACzC,QAAQ,EAAE,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,GAAE,MAAW;IA2CvE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA0E5C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBxC;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAiFnD;;OAEG;IACa,SAAS,IAAI,MAAM;IAgBnC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkC/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK;IAkBjD;;;;OAIG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjD;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAIxB"}
|