@consent.software/catalog 1.6.0 → 1.6.1
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/dist_bundle/bundle.js +40 -106
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/consentsoftware-cookieconsent.d.ts +1 -1
- package/dist_ts_web/elements/consentsoftware-cookieconsent.js +173 -130
- package/dist_ts_web/elements/consentsoftware-header.js +62 -23
- package/dist_ts_web/elements/consentsoftware-mainselection.d.ts +2 -2
- package/dist_ts_web/elements/consentsoftware-mainselection.js +80 -34
- package/dist_ts_web/elements/consentsoftware-tabs.js +71 -32
- package/dist_ts_web/elements/consentsoftware-toggle.js +193 -154
- package/dist_watch/bundle.js +9846 -3848
- package/dist_watch/bundle.js.map +4 -4
- package/package.json +8 -8
- package/readme.md +149 -80
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/consentsoftware-cookieconsent.ts +1 -1
- package/ts_web/elements/consentsoftware-mainselection.ts +2 -2
- package/ts_web/tsconfig.json +4 -4
|
@@ -1,24 +1,86 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
6
27
|
};
|
|
7
|
-
var
|
|
8
|
-
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
9
34
|
};
|
|
10
35
|
import { LitElement, html, css } from 'lit';
|
|
11
36
|
import { customElement } from 'lit/decorators.js';
|
|
12
37
|
import { property } from 'lit/decorators/property.js';
|
|
13
38
|
import { delayFor } from '@push.rocks/smartdelay';
|
|
14
|
-
let ConsentsoftwareToggle =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
39
|
+
let ConsentsoftwareToggle = (() => {
|
|
40
|
+
let _classDecorators = [customElement('consentsoftware-toggle')];
|
|
41
|
+
let _classDescriptor;
|
|
42
|
+
let _classExtraInitializers = [];
|
|
43
|
+
let _classThis;
|
|
44
|
+
let _classSuper = LitElement;
|
|
45
|
+
let _required_decorators;
|
|
46
|
+
let _required_initializers = [];
|
|
47
|
+
let _required_extraInitializers = [];
|
|
48
|
+
let _selected_decorators;
|
|
49
|
+
let _selected_initializers = [];
|
|
50
|
+
let _selected_extraInitializers = [];
|
|
51
|
+
var ConsentsoftwareToggle = class extends _classSuper {
|
|
52
|
+
static { _classThis = this; }
|
|
53
|
+
static {
|
|
54
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
55
|
+
_required_decorators = [property({ type: Boolean })];
|
|
56
|
+
_selected_decorators = [property({ type: Boolean, reflect: true })];
|
|
57
|
+
__esDecorate(this, null, _required_decorators, { kind: "accessor", name: "required", static: false, private: false, access: { has: obj => "required" in obj, get: obj => obj.required, set: (obj, value) => { obj.required = value; } }, metadata: _metadata }, _required_initializers, _required_extraInitializers);
|
|
58
|
+
__esDecorate(this, null, _selected_decorators, { kind: "accessor", name: "selected", static: false, private: false, access: { has: obj => "selected" in obj, get: obj => obj.selected, set: (obj, value) => { obj.selected = value; } }, metadata: _metadata }, _selected_initializers, _selected_extraInitializers);
|
|
59
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
60
|
+
ConsentsoftwareToggle = _classThis = _classDescriptor.value;
|
|
61
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
62
|
+
}
|
|
63
|
+
#required_accessor_storage = __runInitializers(this, _required_initializers, false);
|
|
64
|
+
get required() { return this.#required_accessor_storage; }
|
|
65
|
+
set required(value) { this.#required_accessor_storage = value; }
|
|
66
|
+
#selected_accessor_storage = (__runInitializers(this, _required_extraInitializers), __runInitializers(this, _selected_initializers, false));
|
|
67
|
+
get selected() { return this.#selected_accessor_storage; }
|
|
68
|
+
set selected(value) { this.#selected_accessor_storage = value; }
|
|
69
|
+
/**
|
|
70
|
+
* We always track the knob’s left offset in `currentX`.
|
|
71
|
+
* - 0 => fully left
|
|
72
|
+
* - 30 => fully right
|
|
73
|
+
*/
|
|
74
|
+
currentX = (__runInitializers(this, _selected_extraInitializers), 0);
|
|
75
|
+
/**
|
|
76
|
+
* Drag state
|
|
77
|
+
*/
|
|
78
|
+
isDragging = false;
|
|
79
|
+
hasDragged = false;
|
|
80
|
+
startX = 0; // pointerdown offset
|
|
81
|
+
knobWidth = 30;
|
|
82
|
+
trackWidth = 60;
|
|
83
|
+
static styles = css `
|
|
22
84
|
:host {
|
|
23
85
|
display: block;
|
|
24
86
|
position: relative;
|
|
@@ -85,28 +147,12 @@ let ConsentsoftwareToggle = class ConsentsoftwareToggle extends LitElement {
|
|
|
85
147
|
:host([required]) .toggleKnobInner {
|
|
86
148
|
background: rgba(255, 255, 255, 0.1);
|
|
87
149
|
}
|
|
88
|
-
`;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* We always track the knob’s left offset in `currentX`.
|
|
95
|
-
* - 0 => fully left
|
|
96
|
-
* - 30 => fully right
|
|
97
|
-
*/
|
|
98
|
-
this.currentX = 0;
|
|
99
|
-
/**
|
|
100
|
-
* Drag state
|
|
101
|
-
*/
|
|
102
|
-
this.isDragging = false;
|
|
103
|
-
this.hasDragged = false;
|
|
104
|
-
this.startX = 0; // pointerdown offset
|
|
105
|
-
this.knobWidth = 30;
|
|
106
|
-
this.trackWidth = 60;
|
|
107
|
-
}
|
|
108
|
-
render() {
|
|
109
|
-
return html `
|
|
150
|
+
`;
|
|
151
|
+
constructor() {
|
|
152
|
+
super();
|
|
153
|
+
}
|
|
154
|
+
render() {
|
|
155
|
+
return html `
|
|
110
156
|
<div class="label">${this.getText()}</div>
|
|
111
157
|
<!-- A user can click anywhere in this toggle area. -->
|
|
112
158
|
<div class="toggle" @click=${this.handleClick}>
|
|
@@ -125,132 +171,125 @@ let ConsentsoftwareToggle = class ConsentsoftwareToggle extends LitElement {
|
|
|
125
171
|
</div>
|
|
126
172
|
</div>
|
|
127
173
|
`;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* If required = true on first render, auto-select and set the knob to the right.
|
|
131
|
-
*/
|
|
132
|
-
async firstUpdated() {
|
|
133
|
-
if (this.required) {
|
|
134
|
-
// If "required" => always selected
|
|
135
|
-
this.selected = true;
|
|
136
|
-
this.currentX = this.knobWidth; // 30
|
|
137
|
-
this.requestUpdate();
|
|
138
174
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
175
|
+
/**
|
|
176
|
+
* If required = true on first render, auto-select and set the knob to the right.
|
|
177
|
+
*/
|
|
178
|
+
async firstUpdated() {
|
|
179
|
+
if (this.required) {
|
|
180
|
+
// If "required" => always selected
|
|
181
|
+
this.selected = true;
|
|
182
|
+
this.currentX = this.knobWidth; // 30
|
|
183
|
+
this.requestUpdate();
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// If not required, set knob to 0 or 30 depending on `selected`
|
|
187
|
+
this.currentX = this.selected ? this.knobWidth : 0;
|
|
188
|
+
this.requestUpdate();
|
|
189
|
+
}
|
|
143
190
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
191
|
+
/**
|
|
192
|
+
* CLICK HANDLER
|
|
193
|
+
*/
|
|
194
|
+
async handleClick(event) {
|
|
195
|
+
// If the user truly dragged the knob, skip the normal click toggle.
|
|
196
|
+
if (this.isDragging || this.hasDragged) {
|
|
197
|
+
event.stopPropagation();
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (this.required) {
|
|
202
|
+
// small bounce from 30 -> 20 -> 30
|
|
203
|
+
this.currentX = this.knobWidth; // ensure at 30
|
|
204
|
+
this.requestUpdate();
|
|
205
|
+
await new Promise((r) => setTimeout(r, 10));
|
|
206
|
+
this.currentX = 20; // small bounce left
|
|
207
|
+
this.requestUpdate();
|
|
208
|
+
await delayFor(200);
|
|
209
|
+
this.currentX = this.knobWidth; // back to 30
|
|
210
|
+
this.requestUpdate();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Normal toggle if no drag & not required
|
|
151
214
|
event.stopPropagation();
|
|
152
215
|
event.preventDefault();
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (this.required) {
|
|
156
|
-
// small bounce from 30 -> 20 -> 30
|
|
157
|
-
this.currentX = this.knobWidth; // ensure at 30
|
|
216
|
+
this.selected = !this.selected;
|
|
217
|
+
this.currentX = this.selected ? this.knobWidth : 0; // snap knob left(0) or right(30)
|
|
158
218
|
this.requestUpdate();
|
|
159
|
-
|
|
160
|
-
|
|
219
|
+
this.dispatchEvent(new CustomEvent('toggle', { detail: { selected: this.selected } }));
|
|
220
|
+
delayFor(0).then(() => {
|
|
221
|
+
this.hasDragged = false;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* DRAG HANDLERS (pointer events)
|
|
226
|
+
*/
|
|
227
|
+
onPointerDown(event) {
|
|
228
|
+
if (this.required) {
|
|
229
|
+
// If "required", disallow manual dragging
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Start dragging
|
|
233
|
+
this.isDragging = true;
|
|
234
|
+
// The difference between the pointer’s X and the knob’s current position
|
|
235
|
+
this.startX = event.clientX - this.currentX;
|
|
236
|
+
// capture pointer so we keep receiving pointermove/pointerup
|
|
237
|
+
event.target.setPointerCapture(event.pointerId);
|
|
238
|
+
}
|
|
239
|
+
onPointerMove(event) {
|
|
240
|
+
if (!this.isDragging)
|
|
241
|
+
return;
|
|
242
|
+
const newX = event.clientX - this.startX;
|
|
243
|
+
this.hasDragged = true;
|
|
244
|
+
const toggleKnobInner = this.shadowRoot.querySelector('.toggleKnobInner');
|
|
245
|
+
toggleKnobInner.classList.add('dragging');
|
|
246
|
+
// Clamp
|
|
247
|
+
this.currentX = Math.max(0, Math.min(newX, this.trackWidth - this.knobWidth));
|
|
161
248
|
this.requestUpdate();
|
|
162
|
-
|
|
163
|
-
|
|
249
|
+
}
|
|
250
|
+
onPointerUp(event) {
|
|
251
|
+
if (!this.isDragging)
|
|
252
|
+
return;
|
|
253
|
+
event.target.releasePointerCapture(event.pointerId);
|
|
254
|
+
this.isDragging = false;
|
|
255
|
+
// If we didn’t truly drag, pointerup does nothing; click handler handles toggling.
|
|
256
|
+
if (!this.hasDragged) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const toggleKnobInner = this.shadowRoot.querySelector('.toggleKnobInner');
|
|
260
|
+
toggleKnobInner.classList.remove('dragging');
|
|
261
|
+
// Real drag => decide final side
|
|
262
|
+
const midpoint = (this.trackWidth - this.knobWidth) / 2; // 15
|
|
263
|
+
this.selected = this.currentX > midpoint;
|
|
264
|
+
this.currentX = this.selected ? this.knobWidth : 0; // snap to edge
|
|
164
265
|
this.requestUpdate();
|
|
165
|
-
|
|
266
|
+
// Dispatch toggle event
|
|
267
|
+
this.dispatchEvent(new CustomEvent('toggle', { detail: { selected: this.selected } }));
|
|
268
|
+
delayFor(0).then(() => {
|
|
269
|
+
this.hasDragged = false;
|
|
270
|
+
});
|
|
166
271
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* DRAG HANDLERS (pointer events)
|
|
180
|
-
*/
|
|
181
|
-
onPointerDown(event) {
|
|
182
|
-
if (this.required) {
|
|
183
|
-
// If "required", disallow manual dragging
|
|
184
|
-
return;
|
|
272
|
+
/**
|
|
273
|
+
* If external code sets `selected = true/false`, we also sync the knob position
|
|
274
|
+
*/
|
|
275
|
+
updated(changedProperties) {
|
|
276
|
+
if (changedProperties.has('selected') &&
|
|
277
|
+
!this.isDragging &&
|
|
278
|
+
!this.hasDragged &&
|
|
279
|
+
!this.required) {
|
|
280
|
+
this.currentX = this.selected ? this.knobWidth : 0;
|
|
281
|
+
this.requestUpdate();
|
|
282
|
+
}
|
|
283
|
+
super.updated(changedProperties);
|
|
185
284
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
// The difference between the pointer’s X and the knob’s current position
|
|
189
|
-
this.startX = event.clientX - this.currentX;
|
|
190
|
-
// capture pointer so we keep receiving pointermove/pointerup
|
|
191
|
-
event.target.setPointerCapture(event.pointerId);
|
|
192
|
-
}
|
|
193
|
-
onPointerMove(event) {
|
|
194
|
-
if (!this.isDragging)
|
|
195
|
-
return;
|
|
196
|
-
const newX = event.clientX - this.startX;
|
|
197
|
-
this.hasDragged = true;
|
|
198
|
-
const toggleKnobInner = this.shadowRoot.querySelector('.toggleKnobInner');
|
|
199
|
-
toggleKnobInner.classList.add('dragging');
|
|
200
|
-
// Clamp
|
|
201
|
-
this.currentX = Math.max(0, Math.min(newX, this.trackWidth - this.knobWidth));
|
|
202
|
-
this.requestUpdate();
|
|
203
|
-
}
|
|
204
|
-
onPointerUp(event) {
|
|
205
|
-
if (!this.isDragging)
|
|
206
|
-
return;
|
|
207
|
-
event.target.releasePointerCapture(event.pointerId);
|
|
208
|
-
this.isDragging = false;
|
|
209
|
-
// If we didn’t truly drag, pointerup does nothing; click handler handles toggling.
|
|
210
|
-
if (!this.hasDragged) {
|
|
211
|
-
return;
|
|
285
|
+
getText() {
|
|
286
|
+
return this.textContent;
|
|
212
287
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
// Real drag => decide final side
|
|
216
|
-
const midpoint = (this.trackWidth - this.knobWidth) / 2; // 15
|
|
217
|
-
this.selected = this.currentX > midpoint;
|
|
218
|
-
this.currentX = this.selected ? this.knobWidth : 0; // snap to edge
|
|
219
|
-
this.requestUpdate();
|
|
220
|
-
// Dispatch toggle event
|
|
221
|
-
this.dispatchEvent(new CustomEvent('toggle', { detail: { selected: this.selected } }));
|
|
222
|
-
delayFor(0).then(() => {
|
|
223
|
-
this.hasDragged = false;
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* If external code sets `selected = true/false`, we also sync the knob position
|
|
228
|
-
*/
|
|
229
|
-
updated(changedProperties) {
|
|
230
|
-
if (changedProperties.has('selected') &&
|
|
231
|
-
!this.isDragging &&
|
|
232
|
-
!this.hasDragged &&
|
|
233
|
-
!this.required) {
|
|
234
|
-
this.currentX = this.selected ? this.knobWidth : 0;
|
|
235
|
-
this.requestUpdate();
|
|
288
|
+
static {
|
|
289
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
236
290
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return this.textContent;
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
__decorate([
|
|
244
|
-
property({ type: Boolean }),
|
|
245
|
-
__metadata("design:type", Object)
|
|
246
|
-
], ConsentsoftwareToggle.prototype, "required", null);
|
|
247
|
-
__decorate([
|
|
248
|
-
property({ type: Boolean, reflect: true }),
|
|
249
|
-
__metadata("design:type", Object)
|
|
250
|
-
], ConsentsoftwareToggle.prototype, "selected", null);
|
|
251
|
-
ConsentsoftwareToggle = __decorate([
|
|
252
|
-
customElement('consentsoftware-toggle'),
|
|
253
|
-
__metadata("design:paramtypes", [])
|
|
254
|
-
], ConsentsoftwareToggle);
|
|
291
|
+
};
|
|
292
|
+
return ConsentsoftwareToggle = _classThis;
|
|
293
|
+
})();
|
|
255
294
|
export { ConsentsoftwareToggle };
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHNvZnR3YXJlLXRvZ2dsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9jb25zZW50c29mdHdhcmUtdG9nZ2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQXVCLE1BQU0sS0FBSyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0lBR3JDLHFCQUFxQjs0QkFEakMsYUFBYSxDQUFDLHdCQUF3QixDQUFDOzs7O3NCQUNHLFVBQVU7Ozs7Ozs7cUNBQWxCLFNBQVEsV0FBVTs7OztvQ0FDbEQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29DQUczQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUYzQyw2S0FBZ0IsUUFBUSw2QkFBUixRQUFRLDJGQUFTO1lBR2pDLDZLQUFnQixRQUFRLDZCQUFSLFFBQVEsMkZBQVM7WUFMbkMsNktBd1BDOzs7O1FBdFBDLDZFQUEyQixLQUFLLEVBQUM7UUFBakMsSUFBZ0IsUUFBUSw4Q0FBUztRQUFqQyxJQUFnQixRQUFRLG9EQUFTO1FBR2pDLG9JQUEyQixLQUFLLEdBQUM7UUFBakMsSUFBZ0IsUUFBUSw4Q0FBUztRQUFqQyxJQUFnQixRQUFRLG9EQUFTO1FBRWpDOzs7O1dBSUc7UUFDSyxRQUFRLDBEQUFHLENBQUMsRUFBQztRQUVyQjs7V0FFRztRQUNLLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNu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
|