qms-angular 1.0.86 → 1.0.87
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/bundles/qms-angular.umd.js +6802 -207
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/comment/comment.js +6 -3
- package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
- package/esm2015/lib/components/related/content/related-content.component.js +2 -2
- package/esm2015/lib/components/table/table.module.js +4 -4
- package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +3 -1
- package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +3 -1
- package/esm2015/lib/directives/file-upload/file-upload.directive.js +1 -1
- package/esm2015/lib/model/en.js +63 -2
- package/esm2015/lib/model/no.js +63 -2
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/halo.function.js +87 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.js +3767 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/selection.function.js +56 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.js +1003 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.js +302 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.js +320 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +69 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +412 -0
- package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +317 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +31 -1
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +4 -2
- package/esm2015/public-api.js +7 -1
- package/esm2015/qms-angular.js +2 -1
- package/fesm2015/qms-angular.js +6744 -194
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/comment/comment.d.ts +1 -0
- package/lib/model/en.d.ts +61 -0
- package/lib/model/no.d.ts +61 -0
- package/lib/qms-ckeditor-components/common/flowchart/config/halo.function.d.ts +37 -0
- package/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/flowchart/config/selection.function.d.ts +39 -0
- package/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.d.ts +11 -0
- package/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.d.ts +224 -0
- package/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.d.ts +58 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +16 -0
- package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +56 -0
- package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +35 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +2 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +41 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +4 -0
- package/lib.theme.scss +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/qms-angular.d.ts +1 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/fonts/OpenSans/OpenSans.woff2 +0 -0
- package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
- package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
- package/src/assets/jointjs/images/save-icon-modern.png +0 -0
- package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
- package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
- package/src/assets/jointjs/scss/rappid.scss +326 -0
- package/src/assets/jointjs/scss/theme-picker.scss +22 -0
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +12634 -345
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +2 -2
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +9 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/flowchartdialogcommand.js +47 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +30 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
- package/src/lib/components/comment/comment.scss +1 -0
- package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +1 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon1.svg +1 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon2.svg +6 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon3.svg +11 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon4.svg +8 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-female.png +0 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-male.png +0 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/no-color-icon.svg +72 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-material.png +0 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-modern.png +0 -0
- package/src/lib/qms-ckeditor-components/common/flowchart/assets/transparent-icon.svg +50 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +68 -0
@@ -0,0 +1,320 @@
|
|
1
|
+
/*! Rappid v3.3.0 - HTML5 Diagramming Framework
|
2
|
+
|
3
|
+
Copyright (c) 2021 client IO
|
4
|
+
|
5
|
+
2021-02-12
|
6
|
+
|
7
|
+
|
8
|
+
This Source Code Form is subject to the terms of the Rappid License
|
9
|
+
, v. 2.0. If a copy of the Rappid License was not distributed with this
|
10
|
+
file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
|
11
|
+
or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
|
12
|
+
import { memoize } from 'lodash';
|
13
|
+
export var app;
|
14
|
+
(function (app) {
|
15
|
+
class CircularModel extends joint.shapes.standard.Ellipse {
|
16
|
+
constructor() {
|
17
|
+
super(...arguments);
|
18
|
+
this.portLabelMarkup = [{
|
19
|
+
tagName: 'text',
|
20
|
+
selector: 'portLabel'
|
21
|
+
}];
|
22
|
+
}
|
23
|
+
defaults() {
|
24
|
+
return joint.util.defaultsDeep({
|
25
|
+
type: 'app.CircularModel',
|
26
|
+
attrs: {
|
27
|
+
root: {
|
28
|
+
magnet: false
|
29
|
+
}
|
30
|
+
},
|
31
|
+
ports: {
|
32
|
+
groups: {
|
33
|
+
'in': {
|
34
|
+
markup: [{
|
35
|
+
tagName: 'circle',
|
36
|
+
selector: 'portBody',
|
37
|
+
attributes: {
|
38
|
+
'r': 10
|
39
|
+
}
|
40
|
+
}],
|
41
|
+
attrs: {
|
42
|
+
portBody: {
|
43
|
+
magnet: true,
|
44
|
+
fill: '#61549c',
|
45
|
+
strokeWidth: 0
|
46
|
+
},
|
47
|
+
portLabel: {
|
48
|
+
fontSize: 11,
|
49
|
+
fill: '#61549c',
|
50
|
+
fontWeight: 800
|
51
|
+
}
|
52
|
+
},
|
53
|
+
position: {
|
54
|
+
name: 'ellipse',
|
55
|
+
args: {
|
56
|
+
startAngle: 0,
|
57
|
+
step: 30
|
58
|
+
}
|
59
|
+
},
|
60
|
+
label: {
|
61
|
+
position: {
|
62
|
+
name: 'radial',
|
63
|
+
args: null
|
64
|
+
}
|
65
|
+
}
|
66
|
+
},
|
67
|
+
'out': {
|
68
|
+
markup: [{
|
69
|
+
tagName: 'circle',
|
70
|
+
selector: 'portBody',
|
71
|
+
attributes: {
|
72
|
+
'r': 10
|
73
|
+
}
|
74
|
+
}],
|
75
|
+
attrs: {
|
76
|
+
portBody: {
|
77
|
+
magnet: true,
|
78
|
+
fill: '#61549c',
|
79
|
+
strokeWidth: 0
|
80
|
+
},
|
81
|
+
portLabel: {
|
82
|
+
fontSize: 11,
|
83
|
+
fill: '#61549c',
|
84
|
+
fontWeight: 800
|
85
|
+
}
|
86
|
+
},
|
87
|
+
position: {
|
88
|
+
name: 'ellipse',
|
89
|
+
args: {
|
90
|
+
startAngle: 180,
|
91
|
+
step: 30
|
92
|
+
}
|
93
|
+
},
|
94
|
+
label: {
|
95
|
+
position: {
|
96
|
+
name: 'radial',
|
97
|
+
args: null
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}, joint.shapes.standard.Ellipse.prototype.defaults);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
app.CircularModel = CircularModel;
|
107
|
+
class RectangularModel extends joint.shapes.standard.Rectangle {
|
108
|
+
constructor() {
|
109
|
+
super(...arguments);
|
110
|
+
this.portLabelMarkup = [{
|
111
|
+
tagName: 'text',
|
112
|
+
selector: 'portLabel'
|
113
|
+
}];
|
114
|
+
}
|
115
|
+
defaults() {
|
116
|
+
return joint.util.defaultsDeep({
|
117
|
+
type: 'app.RectangularModel',
|
118
|
+
attrs: {
|
119
|
+
root: {
|
120
|
+
magnet: false
|
121
|
+
}
|
122
|
+
},
|
123
|
+
ports: {
|
124
|
+
groups: {
|
125
|
+
'in': {
|
126
|
+
markup: [{
|
127
|
+
tagName: 'circle',
|
128
|
+
selector: 'portBody',
|
129
|
+
attributes: {
|
130
|
+
'r': 10
|
131
|
+
}
|
132
|
+
}],
|
133
|
+
attrs: {
|
134
|
+
portBody: {
|
135
|
+
magnet: true,
|
136
|
+
fill: '#61549c',
|
137
|
+
strokeWidth: 0
|
138
|
+
},
|
139
|
+
portLabel: {
|
140
|
+
fontSize: 11,
|
141
|
+
fill: '#61549c',
|
142
|
+
fontWeight: 800
|
143
|
+
}
|
144
|
+
},
|
145
|
+
position: {
|
146
|
+
name: 'left'
|
147
|
+
},
|
148
|
+
label: {
|
149
|
+
position: {
|
150
|
+
name: 'left',
|
151
|
+
args: {
|
152
|
+
y: 0
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
},
|
157
|
+
'out': {
|
158
|
+
markup: [{
|
159
|
+
tagName: 'circle',
|
160
|
+
selector: 'portBody',
|
161
|
+
attributes: {
|
162
|
+
'r': 10
|
163
|
+
}
|
164
|
+
}],
|
165
|
+
position: {
|
166
|
+
name: 'right'
|
167
|
+
},
|
168
|
+
attrs: {
|
169
|
+
portBody: {
|
170
|
+
magnet: true,
|
171
|
+
fill: '#61549c',
|
172
|
+
strokeWidth: 0
|
173
|
+
},
|
174
|
+
portLabel: {
|
175
|
+
fontSize: 11,
|
176
|
+
fill: '#61549c',
|
177
|
+
fontWeight: 800
|
178
|
+
}
|
179
|
+
},
|
180
|
+
label: {
|
181
|
+
position: {
|
182
|
+
name: 'right',
|
183
|
+
args: {
|
184
|
+
y: 0
|
185
|
+
}
|
186
|
+
}
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}, joint.shapes.standard.Rectangle.prototype.defaults);
|
192
|
+
}
|
193
|
+
}
|
194
|
+
app.RectangularModel = RectangularModel;
|
195
|
+
class Link extends joint.shapes.standard.Link {
|
196
|
+
constructor() {
|
197
|
+
super(...arguments);
|
198
|
+
this.defaultLabel = {
|
199
|
+
attrs: {
|
200
|
+
rect: {
|
201
|
+
fill: '#ffffff',
|
202
|
+
stroke: '#8f8f8f',
|
203
|
+
strokeWidth: 1,
|
204
|
+
refWidth: 10,
|
205
|
+
refHeight: 10,
|
206
|
+
refX: -5,
|
207
|
+
refY: -5
|
208
|
+
}
|
209
|
+
}
|
210
|
+
};
|
211
|
+
this.getDataWidthCached = memoize((d) => (new joint.g.Path(d)).bbox().width);
|
212
|
+
}
|
213
|
+
static connectionPoint(line, view, magnet, opt, type, linkView) {
|
214
|
+
const markerWidth = linkView.model.getMarkerWidth(type);
|
215
|
+
opt = { offset: markerWidth, stroke: true };
|
216
|
+
// connection point for UML shapes lies on the root group containg all the shapes components
|
217
|
+
const modelType = view.model.get('type');
|
218
|
+
if (modelType.indexOf('uml') === 0) {
|
219
|
+
opt.selector = 'root';
|
220
|
+
}
|
221
|
+
// taking the border stroke-width into account
|
222
|
+
if (modelType === 'standard.InscribedImage') {
|
223
|
+
opt.selector = 'border';
|
224
|
+
}
|
225
|
+
return joint.connectionPoints.boundary.call(this, line, view, magnet, opt, type, linkView);
|
226
|
+
}
|
227
|
+
defaults() {
|
228
|
+
return joint.util.defaultsDeep({
|
229
|
+
type: 'app.Link',
|
230
|
+
router: {
|
231
|
+
name: 'normal'
|
232
|
+
},
|
233
|
+
connector: {
|
234
|
+
name: 'rounded'
|
235
|
+
},
|
236
|
+
labels: [],
|
237
|
+
attrs: {
|
238
|
+
line: {
|
239
|
+
stroke: '#8f8f8f',
|
240
|
+
strokeDasharray: '0',
|
241
|
+
strokeWidth: 2,
|
242
|
+
fill: 'none',
|
243
|
+
sourceMarker: {
|
244
|
+
type: 'path',
|
245
|
+
d: 'M 0 0 0 0',
|
246
|
+
stroke: 'none'
|
247
|
+
},
|
248
|
+
targetMarker: {
|
249
|
+
type: 'path',
|
250
|
+
d: 'M 0 -5 -10 0 0 5 z',
|
251
|
+
stroke: 'none'
|
252
|
+
}
|
253
|
+
}
|
254
|
+
}
|
255
|
+
}, joint.shapes.standard.Link.prototype.defaults);
|
256
|
+
}
|
257
|
+
getMarkerWidth(type) {
|
258
|
+
const d = (type === 'source') ? this.attr('line/sourceMarker/d') : this.attr('line/targetMarker/d');
|
259
|
+
return this.getDataWidth(d);
|
260
|
+
}
|
261
|
+
getDataWidth(d) {
|
262
|
+
return this.getDataWidthCached(d);
|
263
|
+
}
|
264
|
+
}
|
265
|
+
app.Link = Link;
|
266
|
+
})(app || (app = {}));
|
267
|
+
const ɵ0 = function (flags) {
|
268
|
+
if (this.hasFlag(flags, 'RENDER')) {
|
269
|
+
this.render();
|
270
|
+
}
|
271
|
+
if (this.hasFlag(flags, 'UPDATE')) {
|
272
|
+
this.update();
|
273
|
+
}
|
274
|
+
if (this.hasFlag(flags, 'TRANSFORM')) {
|
275
|
+
this.updateTransformation();
|
276
|
+
}
|
277
|
+
}, ɵ1 = function () {
|
278
|
+
const { fragment, selectors: { body } } = joint.util.parseDOMJSON(this.markup);
|
279
|
+
this.body = body;
|
280
|
+
this.el.appendChild(fragment);
|
281
|
+
}, ɵ2 = function () {
|
282
|
+
const { model, body } = this;
|
283
|
+
const { width, height } = model.size();
|
284
|
+
body.setAttribute('width', width);
|
285
|
+
body.setAttribute('height', height);
|
286
|
+
};
|
287
|
+
export const NavigatorElementView = joint.dia.ElementView.extend({
|
288
|
+
body: null,
|
289
|
+
markup: [{
|
290
|
+
tagName: 'rect',
|
291
|
+
selector: 'body',
|
292
|
+
attributes: {
|
293
|
+
'fill': '#31d0c6'
|
294
|
+
}
|
295
|
+
}],
|
296
|
+
initFlag: ['RENDER', 'UPDATE', 'TRANSFORM'],
|
297
|
+
presentationAttributes: {
|
298
|
+
size: ['UPDATE'],
|
299
|
+
position: ['TRANSFORM'],
|
300
|
+
angle: ['TRANSFORM']
|
301
|
+
},
|
302
|
+
confirmUpdate: ɵ0,
|
303
|
+
render: ɵ1,
|
304
|
+
update: ɵ2
|
305
|
+
});
|
306
|
+
export const NavigatorLinkView = joint.dia.LinkView.extend({
|
307
|
+
initialize: joint.util.noop,
|
308
|
+
render: joint.util.noop,
|
309
|
+
update: joint.util.noop
|
310
|
+
});
|
311
|
+
// re-export build-in shapes from rappid
|
312
|
+
export const basic = joint.shapes.basic;
|
313
|
+
export const standard = joint.shapes.standard;
|
314
|
+
export const fsa = joint.shapes.fsa;
|
315
|
+
export const pn = joint.shapes.pn;
|
316
|
+
export const erd = joint.shapes.erd;
|
317
|
+
export const uml = joint.shapes.uml;
|
318
|
+
export const org = joint.shapes.org;
|
319
|
+
export { ɵ0, ɵ1, ɵ2 };
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNoYXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9tb2RlbHMvYXBwLXNoYXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztvRkFVb0Y7QUFHcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxNQUFNLEtBQVcsR0FBRyxDQTJQbkI7QUEzUEQsV0FBaUIsR0FBRztJQUVoQixNQUFhLGFBQWMsU0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1FBQWhFOztZQUVJLG9CQUFlLEdBQUcsQ0FBQztvQkFDZixPQUFPLEVBQUUsTUFBTTtvQkFDZixRQUFRLEVBQUUsV0FBVztpQkFDeEIsQ0FBQyxDQUFDO1FBcUZQLENBQUM7UUFuRkcsUUFBUTtZQUVKLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQzNCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRTtvQkFDSCxJQUFJLEVBQUU7d0JBQ0YsTUFBTSxFQUFFLEtBQUs7cUJBQ2hCO2lCQUNKO2dCQUNELEtBQUssRUFBRTtvQkFDSCxNQUFNLEVBQUU7d0JBQ0osSUFBSSxFQUFFOzRCQUNGLE1BQU0sRUFBRSxDQUFDO29DQUNMLE9BQU8sRUFBRSxRQUFRO29DQUNqQixRQUFRLEVBQUUsVUFBVTtvQ0FDcEIsVUFBVSxFQUFFO3dDQUNSLEdBQUcsRUFBRSxFQUFFO3FDQUNWO2lDQUNKLENBQUM7NEJBQ0YsS0FBSyxFQUFFO2dDQUNILFFBQVEsRUFBRTtvQ0FDTixNQUFNLEVBQUUsSUFBSTtvQ0FDWixJQUFJLEVBQUUsU0FBUztvQ0FDZixXQUFXLEVBQUUsQ0FBQztpQ0FDakI7Z0NBQ0QsU0FBUyxFQUFFO29DQUNQLFFB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QUFDLFFBQVEsQ0FBQztRQUNoQixRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdkIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQ3ZCO0lBRUQsYUFBYSxJQUtaO0lBRUQsTUFBTSxJQUlMO0lBRUQsTUFBTSxJQUtMO0NBQ0osQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBRXZELFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7SUFFM0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSTtJQUV2QixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO0NBQzFCLENBQUMsQ0FBQztBQUVILHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgUmFwcGlkIHYzLjMuMCAtIEhUTUw1IERpYWdyYW1taW5nIEZyYW1ld29ya1xyXG5cclxuQ29weXJpZ2h0IChjKSAyMDIxIGNsaWVudCBJT1xyXG5cclxuIDIwMjEtMDItMTIgXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoJztcclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueVxyXG5leHBvcnQgbmFtZXNwYWNlIGFwcCB7XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIENpcmN1bGFyTW9kZWwgZXh0ZW5kcyBqb2ludC5zaGFwZXMuc3RhbmRhcmQuRWxsaXBzZSB7XHJcblxyXG4gICAgICAgIHBvcnRMYWJlbE1hcmt1cCA9IFt7XHJcbiAgICAgICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdwb3J0TGFiZWwnXHJcbiAgICAgICAgfV07XHJcblxyXG4gICAgICAgIGRlZmF1bHRzKCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LnV0aWwuZGVmYXVsdHNEZWVwKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhcHAuQ2lyY3VsYXJNb2RlbCcsXHJcbiAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmV0OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwb3J0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3Vwczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW4nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZTogJ2NpcmNsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdwb3J0Qm9keScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncic6IDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRCb2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25ldDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyM2MTU0OWMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydExhYmVsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyM2MTU0OWMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA4MDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZWxsaXBzZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAzMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyYWRpYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3V0Jzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydEJvZHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3InOiAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Qm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRMYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2VsbGlwc2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZTogMTgwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAzMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyYWRpYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBqb2ludC5zaGFwZXMuc3RhbmRhcmQuRWxsaXBzZS5wcm90b3R5cGUuZGVmYXVsdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgUmVjdGFuZ3VsYXJNb2RlbCBleHRlbmRzIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5SZWN0YW5nbGUge1xyXG5cclxuICAgICAgICBwb3J0TGFiZWxNYXJrdXAgPSBbe1xyXG4gICAgICAgICAgICB0YWdOYW1lOiAndGV4dCcsXHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydExhYmVsJ1xyXG4gICAgICAgIH1dO1xyXG5cclxuICAgICAgICBkZWZhdWx0cygpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC51dGlsLmRlZmF1bHRzRGVlcCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXBwLlJlY3Rhbmd1bGFyTW9kZWwnLFxyXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICByb290OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25ldDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9ydHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2luJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydEJvZHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3InOiAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Qm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRMYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ291dCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cDogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lOiAnY2lyY2xlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ3BvcnRCb2R5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyJzogMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydEJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmV0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnIzYxNTQ5YycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0TGFiZWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDExLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnIzYxNTQ5YycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDgwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgam9pbnQuc2hhcGVzLnN0YW5kYXJkLlJlY3RhbmdsZS5wcm90b3R5cGUuZGVmYXVsdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgTGluayBleHRlbmRzIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5MaW5rIHtcclxuXHJcbiAgICAgICAgZGVmYXVsdExhYmVsID0ge1xyXG4gICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgcmVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjOGY4ZjhmJyxcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICAgICAgICByZWZXaWR0aDogMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmSGVpZ2h0OiAxMCxcclxuICAgICAgICAgICAgICAgICAgICByZWZYOiAtNSxcclxuICAgICAgICAgICAgICAgICAgICByZWZZOiAtNVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSBnZXREYXRhV2lkdGhDYWNoZWQgPSBtZW1vaXplKChkOiBzdHJpbmcpID0+IChuZXcgam9pbnQuZy5QYXRoKGQpKS5iYm94KCkud2lkdGgpO1xyXG5cclxuICAgICAgICBzdGF0aWMgY29ubmVjdGlvblBvaW50KGxpbmU6IGFueSwgdmlldzogYW55LCBtYWduZXQ6IGFueSwgb3B0OiBhbnksIHR5cGU6IGFueSwgbGlua1ZpZXc6IGFueSk6IGFueSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcldpZHRoID0gbGlua1ZpZXcubW9kZWwuZ2V0TWFya2VyV2lkdGgodHlwZSk7XHJcbiAgICAgICAgICAgIG9wdCA9IHsgb2Zmc2V0OiBtYXJrZXJXaWR0aCwgc3Ryb2tlOiB0cnVlIH07XHJcbiAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gcG9pbnQgZm9yIFVNTCBzaGFwZXMgbGllcyBvbiB0aGUgcm9vdCBncm91cCBjb250YWluZyBhbGwgdGhlIHNoYXBlcyBjb21wb25lbnRzXHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVHlwZSA9IHZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbFR5cGUuaW5kZXhPZigndW1sJykgPT09IDApIHsgb3B0LnNlbGVjdG9yID0gJ3Jvb3QnOyB9XHJcbiAgICAgICAgICAgIC8vIHRha2luZyB0aGUgYm9yZGVyIHN0cm9rZS13aWR0aCBpbnRvIGFjY291bnRcclxuICAgICAgICAgICAgaWYgKG1vZGVsVHlwZSA9PT0gJ3N0YW5kYXJkLkluc2NyaWJlZEltYWdlJykgeyBvcHQuc2VsZWN0b3IgPSAnYm9yZGVyJzsgfVxyXG4gICAgICAgICAgICByZXR1cm4gam9pbnQuY29ubmVjdGlvblBvaW50cy5ib3VuZGFyeS5jYWxsKHRoaXMsIGxpbmUsIHZpZXcsIG1hZ25ldCwgb3B0LCB0eXBlLCBsaW5rVmlldyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWZhdWx0cygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LnV0aWwuZGVmYXVsdHNEZWVwKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhcHAuTGluaycsXHJcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbm9ybWFsJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rvcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyb3VuZGVkJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsczogW10sXHJcbiAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzhmOGY4ZicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ25vbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXJrZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwYXRoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICdNIDAgMCAwIDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnbm9uZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFya2VyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGF0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiAnTSAwIC01IC0xMCAwIDAgNSB6JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5MaW5rLnByb3RvdHlwZS5kZWZhdWx0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXRNYXJrZXJXaWR0aCh0eXBlOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgZCA9ICh0eXBlID09PSAnc291cmNlJykgPyB0aGlzLmF0dHIoJ2xpbmUvc291cmNlTWFya2VyL2QnKSA6IHRoaXMuYXR0cignbGluZS90YXJnZXRNYXJrZXIvZCcpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhV2lkdGgoZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREYXRhV2lkdGgoZDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFXaWR0aENhY2hlZChkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOYXZpZ2F0b3JFbGVtZW50VmlldyA9IGpvaW50LmRpYS5FbGVtZW50Vmlldy5leHRlbmQoe1xyXG5cclxuICAgIGJvZHk6IG51bGwsXHJcblxyXG4gICAgbWFya3VwOiBbe1xyXG4gICAgICAgIHRhZ05hbWU6ICdyZWN0JyxcclxuICAgICAgICBzZWxlY3RvcjogJ2JvZHknLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgJ2ZpbGwnOiAnIzMxZDBjNidcclxuICAgICAgICB9XHJcbiAgICB9XSxcclxuXHJcbiAgICBpbml0RmxhZzogWydSRU5ERVInLCAnVVBEQVRFJywgJ1RSQU5TRk9STSddLFxyXG5cclxuICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZXM6IHtcclxuICAgICAgICBzaXplOiBbJ1VQREFURSddLFxyXG4gICAgICAgIHBvc2l0aW9uOiBbJ1RSQU5TRk9STSddLFxyXG4gICAgICAgIGFuZ2xlOiBbJ1RSQU5TRk9STSddXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbmZpcm1VcGRhdGU6IGZ1bmN0aW9uIChmbGFnczogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhc0ZsYWcoZmxhZ3MsICdSRU5ERVInKSkgeyB0aGlzLnJlbmRlcigpOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRmxhZyhmbGFncywgJ1VQREFURScpKSB7IHRoaXMudXBkYXRlKCk7IH1cclxuICAgICAgICBpZiAodGhpcy5oYXNGbGFnKGZsYWdzLCAnVFJBTlNGT1JNJykpIHsgdGhpcy51cGRhdGVUcmFuc2Zvcm1hdGlvbigpOyB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHsgZnJhZ21lbnQsIHNlbGVjdG9yczogeyBib2R5IH0gfSA9IGpvaW50LnV0aWwucGFyc2VET01KU09OKHRoaXMubWFya3VwKTtcclxuICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xyXG4gICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB7IG1vZGVsLCBib2R5IH0gPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbW9kZWwuc2l6ZSgpO1xyXG4gICAgICAgIGJvZHkuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdpZHRoKTtcclxuICAgICAgICBib2R5LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaGVpZ2h0KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE5hdmlnYXRvckxpbmtWaWV3ID0gam9pbnQuZGlhLkxpbmtWaWV3LmV4dGVuZCh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTogam9pbnQudXRpbC5ub29wLFxyXG5cclxuICAgIHJlbmRlcjogam9pbnQudXRpbC5ub29wLFxyXG5cclxuICAgIHVwZGF0ZTogam9pbnQudXRpbC5ub29wXHJcbn0pO1xyXG5cclxuLy8gcmUtZXhwb3J0IGJ1aWxkLWluIHNoYXBlcyBmcm9tIHJhcHBpZFxyXG5leHBvcnQgY29uc3QgYmFzaWMgPSBqb2ludC5zaGFwZXMuYmFzaWM7XHJcbmV4cG9ydCBjb25zdCBzdGFuZGFyZCA9IGpvaW50LnNoYXBlcy5zdGFuZGFyZDtcclxuZXhwb3J0IGNvbnN0IGZzYSA9IGpvaW50LnNoYXBlcy5mc2E7XHJcbmV4cG9ydCBjb25zdCBwbiA9IGpvaW50LnNoYXBlcy5wbjtcclxuZXhwb3J0IGNvbnN0IGVyZCA9IGpvaW50LnNoYXBlcy5lcmQ7XHJcbmV4cG9ydCBjb25zdCB1bWwgPSBqb2ludC5zaGFwZXMudW1sO1xyXG5leHBvcnQgY29uc3Qgb3JnID0gam9pbnQuc2hhcGVzLm9yZztcclxuXHJcbiJdfQ==
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/*! Rappid v3.3.0 - HTML5 Diagramming Framework
|
2
|
+
|
3
|
+
Copyright (c) 2021 client IO
|
4
|
+
|
5
|
+
2021-02-12
|
6
|
+
|
7
|
+
|
8
|
+
This Source Code Form is subject to the terms of the Rappid License
|
9
|
+
, v. 2.0. If a copy of the Rappid License was not distributed with this
|
10
|
+
file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
|
11
|
+
or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
|
12
|
+
// import * as joint from '@clientio/rappid';
|
13
|
+
import * as _ from 'lodash';
|
14
|
+
export class KeyboardService {
|
15
|
+
constructor() {
|
16
|
+
this.keyboard = new joint.ui.Keyboard();
|
17
|
+
}
|
18
|
+
create(graph, clipboard, selection, paperScroller, commandManager) {
|
19
|
+
this.keyboard.on({
|
20
|
+
'ctrl+c': () => {
|
21
|
+
// Copy all selected elements and their associated links.
|
22
|
+
clipboard.copyElements(selection.collection, graph);
|
23
|
+
},
|
24
|
+
'ctrl+v': () => {
|
25
|
+
const pastedCells = clipboard.pasteCells(graph, {
|
26
|
+
translate: { dx: 20, dy: 20 },
|
27
|
+
useLocalStorage: true
|
28
|
+
});
|
29
|
+
const elements = _.filter(pastedCells, cell => cell.isElement());
|
30
|
+
// Make sure pasted elements get selected immediately. This makes the UX better as
|
31
|
+
// the user can immediately manipulate the pasted elements.
|
32
|
+
selection.collection.reset(elements);
|
33
|
+
},
|
34
|
+
'ctrl+x shift+delete': () => {
|
35
|
+
clipboard.cutElements(selection.collection, graph);
|
36
|
+
},
|
37
|
+
'delete backspace': (evt) => {
|
38
|
+
evt.preventDefault();
|
39
|
+
graph.removeCells(selection.collection.toArray());
|
40
|
+
},
|
41
|
+
'ctrl+z': () => {
|
42
|
+
commandManager.undo();
|
43
|
+
selection.cancelSelection();
|
44
|
+
},
|
45
|
+
'ctrl+y': () => {
|
46
|
+
commandManager.redo();
|
47
|
+
selection.cancelSelection();
|
48
|
+
},
|
49
|
+
'ctrl+a': () => {
|
50
|
+
selection.collection.reset(graph.getElements());
|
51
|
+
},
|
52
|
+
'ctrl+plus': (evt) => {
|
53
|
+
evt.preventDefault();
|
54
|
+
paperScroller.zoom(0.2, { max: 5, grid: 0.2 });
|
55
|
+
},
|
56
|
+
'ctrl+minus': (evt) => {
|
57
|
+
evt.preventDefault();
|
58
|
+
paperScroller.zoom(-0.2, { min: 0.2, grid: 0.2 });
|
59
|
+
},
|
60
|
+
'keydown:shift': (evt) => {
|
61
|
+
paperScroller.setCursor('crosshair');
|
62
|
+
},
|
63
|
+
'keyup:shift': () => {
|
64
|
+
paperScroller.setCursor('grab');
|
65
|
+
}
|
66
|
+
});
|
67
|
+
}
|
68
|
+
}
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tleWJvYXJkLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GO0FBR3BGLDZDQUE2QztBQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sZUFBZTtJQUl4QjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQ0YsS0FBVSxFQUNWLFNBQWMsRUFDZCxTQUFjLEVBQ2QsYUFBa0IsRUFDbEIsY0FBbUI7UUFHbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFYixRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUVYLHlEQUF5RDtnQkFDekQsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUVYLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO29CQUM1QyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQzdCLGVBQWUsRUFBRSxJQUFJO2lCQUN4QixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFFakUsa0ZBQWtGO2dCQUNsRiwyREFBMkQ7Z0JBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsa0JBQWtCLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUVELFdBQVcsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDL0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUVELFlBQVksRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDaEMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsZUFBZSxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNuQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxhQUFhLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgUmFwcGlkIHYzLjMuMCAtIEhUTUw1IERpYWdyYW1taW5nIEZyYW1ld29ya1xyXG5cclxuQ29weXJpZ2h0IChjKSAyMDIxIGNsaWVudCBJT1xyXG5cclxuIDIwMjEtMDItMTIgXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG4vLyBpbXBvcnQgKiBhcyBqb2ludCBmcm9tICdAY2xpZW50aW8vcmFwcGlkJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmRTZXJ2aWNlIHtcclxuXHJcbiAgICBrZXlib2FyZDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMua2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoXHJcbiAgICAgICAgZ3JhcGg6IGFueSxcclxuICAgICAgICBjbGlwYm9hcmQ6IGFueSxcclxuICAgICAgICBzZWxlY3Rpb246IGFueSxcclxuICAgICAgICBwYXBlclNjcm9sbGVyOiBhbnksXHJcbiAgICAgICAgY29tbWFuZE1hbmFnZXI6IGFueVxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMua2V5Ym9hcmQub24oe1xyXG5cclxuICAgICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb3B5IGFsbCBzZWxlY3RlZCBlbGVtZW50cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBsaW5rcy5cclxuICAgICAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK3YnOiAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgY2VsbCA9PiBjZWxsLmlzRWxlbWVudCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGFzdGVkIGVsZW1lbnRzIGdldCBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyB0aGUgVVggYmV0dGVyIGFzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dDogSlF1ZXJ5LkV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIudW5kbygpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0OiBKUXVlcnkuRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK21pbnVzJzogKGV2dDogSlF1ZXJ5LkV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2tleXVwOnNoaWZ0JzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|