@cubist-labs/cubesigner-sdk 0.4.263 → 0.4.266
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/package.json +12 -4
- package/dist/src/acl.js +1 -2
- package/dist/src/audit_log.d.ts +4 -4
- package/dist/src/audit_log.js +116 -119
- package/dist/src/bucket.d.ts +2 -2
- package/dist/src/bucket.d.ts.map +1 -1
- package/dist/src/bucket.js +2 -5
- package/dist/src/client/api_client.d.ts +16 -12
- package/dist/src/client/api_client.d.ts.map +1 -1
- package/dist/src/client/api_client.js +288 -292
- package/dist/src/client/base_client.d.ts +6 -6
- package/dist/src/client/base_client.d.ts.map +1 -1
- package/dist/src/client/base_client.js +27 -38
- package/dist/src/client/session.d.ts +2 -2
- package/dist/src/client/session.d.ts.map +1 -1
- package/dist/src/client/session.js +20 -35
- package/dist/src/client.d.ts +18 -18
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +14 -18
- package/dist/src/contact.d.ts +3 -3
- package/dist/src/contact.d.ts.map +1 -1
- package/dist/src/contact.js +4 -8
- package/dist/src/diffie_hellman.d.ts +1 -1
- package/dist/src/diffie_hellman.d.ts.map +1 -1
- package/dist/src/diffie_hellman.js +9 -12
- package/dist/src/env.js +13 -20
- package/dist/src/error.d.ts +2 -2
- package/dist/src/error.d.ts.map +1 -1
- package/dist/src/error.js +3 -8
- package/dist/src/events.js +2 -6
- package/dist/src/evm/index.d.ts +1 -1
- package/dist/src/evm/index.d.ts.map +1 -1
- package/dist/src/evm/index.js +5 -9
- package/dist/src/fetch.d.ts +1 -1
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +10 -15
- package/dist/src/index.d.ts +24 -24
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -48
- package/dist/src/key.d.ts +10 -8
- package/dist/src/key.d.ts.map +1 -1
- package/dist/src/key.js +35 -34
- package/dist/src/mfa.d.ts +2 -2
- package/dist/src/mfa.d.ts.map +1 -1
- package/dist/src/mfa.js +14 -25
- package/dist/src/org.d.ts +197 -197
- package/dist/src/org.d.ts.map +1 -1
- package/dist/src/org.js +28 -32
- package/dist/src/paginator.js +3 -8
- package/dist/src/passkey.d.ts +1 -1
- package/dist/src/passkey.d.ts.map +1 -1
- package/dist/src/passkey.js +16 -23
- package/dist/src/policy.d.ts +1 -1
- package/dist/src/policy.d.ts.map +1 -1
- package/dist/src/policy.js +17 -27
- package/dist/src/response.d.ts +16 -7
- package/dist/src/response.d.ts.map +1 -1
- package/dist/src/response.js +42 -21
- package/dist/src/retry.d.ts.map +1 -1
- package/dist/src/retry.js +5 -11
- package/dist/src/role.d.ts +3 -3
- package/dist/src/role.d.ts.map +1 -1
- package/dist/src/role.js +13 -18
- package/dist/src/schema.d.ts +117 -40
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +2 -3
- package/dist/src/schema_types.d.ts +6 -3
- package/dist/src/schema_types.d.ts.map +1 -1
- package/dist/src/schema_types.js +11 -7
- package/dist/src/scopes.d.ts +1 -1
- package/dist/src/scopes.d.ts.map +1 -1
- package/dist/src/scopes.js +19 -21
- package/dist/src/signer_session.d.ts +1 -1
- package/dist/src/signer_session.d.ts.map +1 -1
- package/dist/src/signer_session.js +2 -6
- package/dist/src/user_export.d.ts +1 -1
- package/dist/src/user_export.d.ts.map +1 -1
- package/dist/src/user_export.js +10 -18
- package/dist/src/util.js +9 -19
- package/package.json +12 -4
- package/src/audit_log.ts +1 -1
- package/src/bucket.ts +2 -2
- package/src/client/api_client.ts +25 -19
- package/src/client/base_client.ts +10 -10
- package/src/client/session.ts +4 -4
- package/src/client.ts +12 -6
- package/src/contact.ts +3 -3
- package/src/diffie_hellman.ts +3 -3
- package/src/env.ts +3 -3
- package/src/error.ts +2 -2
- package/src/evm/index.ts +1 -1
- package/src/fetch.ts +3 -3
- package/src/index.ts +29 -24
- package/src/key.ts +16 -12
- package/src/mfa.ts +3 -3
- package/src/org.ts +4 -4
- package/src/passkey.ts +1 -1
- package/src/policy.ts +2 -2
- package/src/response.ts +57 -12
- package/src/role.ts +3 -3
- package/src/schema.ts +110 -23
- package/src/schema_types.ts +14 -3
- package/src/scopes.ts +2 -1
- package/src/signer_session.ts +1 -1
- package/src/user_export.ts +2 -2
- package/tsconfig.json +12 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { FetchResponseSuccessData, Op, Operation, SimpleOptions } from "../fetch";
|
|
2
|
-
import { EventEmitter } from "../events";
|
|
3
|
-
import { ErrResponse } from "../error";
|
|
4
|
-
import type { SessionData, SessionManager, SessionMetadata } from "./session";
|
|
5
|
-
import type { NewSessionResponse } from "../schema_types";
|
|
6
|
-
import type { EnvInterface } from "../env";
|
|
1
|
+
import type { FetchResponseSuccessData, Op, Operation, SimpleOptions } from "../fetch.ts";
|
|
2
|
+
import { EventEmitter } from "../events.ts";
|
|
3
|
+
import { ErrResponse } from "../error.ts";
|
|
4
|
+
import type { SessionData, SessionManager, SessionMetadata } from "./session.ts";
|
|
5
|
+
import type { NewSessionResponse } from "../schema_types.ts";
|
|
6
|
+
import type { EnvInterface } from "../env.ts";
|
|
7
7
|
/** CubeSigner SDK package name */
|
|
8
8
|
export declare const NAME: string;
|
|
9
9
|
/** CubeSigner SDK version */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_client.d.ts","sourceRoot":"","sources":["../../../src/client/base_client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"base_client.d.ts","sourceRoot":"","sources":["../../../src/client/base_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
2
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
@@ -10,40 +9,31 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
11
|
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
12
|
var _BaseClient_instances, _BaseClient_targetOrgId, _BaseClient_preferredEnv, _BaseClient_applyOptions, _BaseClient_classifyAndEmitError;
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.BaseClient = exports.ALL_EVENTS = exports.UserMfaFailedEvent = exports.SessionExpiredEvent = exports.VERSION = exports.NAME = void 0;
|
|
19
|
-
exports.signerSessionFromSessionInfo = signerSessionFromSessionInfo;
|
|
20
|
-
exports.authHeader = authHeader;
|
|
21
13
|
// NOTE: add '// @ts-nocheck' at the top of this file to speed up type checking
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
import pkg from "../../package.json" with { type: "json" };
|
|
15
|
+
import { assertOk } from "../fetch.js";
|
|
16
|
+
import { retry } from "../retry.js";
|
|
17
|
+
import { EventEmitter } from "../events.js";
|
|
18
|
+
import { ErrResponse } from "../error.js";
|
|
19
|
+
import { MemorySessionManager, metadata, parseBase64SessionData } from "./session.js";
|
|
20
|
+
import { mergeHeaders } from "openapi-fetch";
|
|
29
21
|
/** CubeSigner SDK package name */
|
|
30
|
-
|
|
22
|
+
export const NAME = pkg.name;
|
|
31
23
|
/** CubeSigner SDK version */
|
|
32
|
-
|
|
24
|
+
export const VERSION = pkg.version;
|
|
33
25
|
/** Event emitted when a request fails because of an expired/invalid session */
|
|
34
|
-
class SessionExpiredEvent {
|
|
26
|
+
export class SessionExpiredEvent {
|
|
35
27
|
}
|
|
36
|
-
exports.SessionExpiredEvent = SessionExpiredEvent;
|
|
37
28
|
/** Event emitted when a request fails because user failed to answer an MFA challenge */
|
|
38
|
-
class UserMfaFailedEvent extends
|
|
29
|
+
export class UserMfaFailedEvent extends ErrResponse {
|
|
39
30
|
}
|
|
40
|
-
exports.UserMfaFailedEvent = UserMfaFailedEvent;
|
|
41
31
|
/**
|
|
42
32
|
* An event emitter for all clients
|
|
43
33
|
*
|
|
44
34
|
* @deprecated
|
|
45
35
|
*/
|
|
46
|
-
|
|
36
|
+
export const ALL_EVENTS = new EventEmitter();
|
|
47
37
|
/**
|
|
48
38
|
* Check whether two environment descriptions refer to the same CubeSigner environment.
|
|
49
39
|
*
|
|
@@ -75,7 +65,7 @@ function validatePreferredEnv(preferredEnv, sessionMeta) {
|
|
|
75
65
|
/**
|
|
76
66
|
* Implements a retry strategy and session refreshes
|
|
77
67
|
*/
|
|
78
|
-
class BaseClient extends
|
|
68
|
+
export class BaseClient extends EventEmitter {
|
|
79
69
|
/** @returns The env */
|
|
80
70
|
get env() {
|
|
81
71
|
return __classPrivateFieldGet(this, _BaseClient_preferredEnv, "f") ?? this.sessionMeta.env["Dev-CubeSignerStack"];
|
|
@@ -96,14 +86,14 @@ class BaseClient extends events_1.EventEmitter {
|
|
|
96
86
|
* @returns A Client
|
|
97
87
|
*/
|
|
98
88
|
static async create(session, targetOrgId) {
|
|
99
|
-
const sessionObj = typeof session === "string" ?
|
|
89
|
+
const sessionObj = typeof session === "string" ? parseBase64SessionData(session) : session;
|
|
100
90
|
if (typeof sessionObj.token === "function") {
|
|
101
91
|
const manager = sessionObj;
|
|
102
92
|
return new this(await manager.metadata(), manager, targetOrgId);
|
|
103
93
|
}
|
|
104
94
|
else {
|
|
105
95
|
session = sessionObj;
|
|
106
|
-
return new this(
|
|
96
|
+
return new this(metadata(session), new MemorySessionManager(session), targetOrgId);
|
|
107
97
|
}
|
|
108
98
|
}
|
|
109
99
|
/**
|
|
@@ -155,7 +145,7 @@ class BaseClient extends events_1.EventEmitter {
|
|
|
155
145
|
async exec(op, opts) {
|
|
156
146
|
try {
|
|
157
147
|
let token = await this.sessionManager.token();
|
|
158
|
-
const resp = await
|
|
148
|
+
const resp = await retry(() => op(__classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_applyOptions).call(this, token, opts)), {
|
|
159
149
|
pred: async (resp) => {
|
|
160
150
|
const status = resp.response.status;
|
|
161
151
|
const error = resp.error;
|
|
@@ -177,17 +167,16 @@ class BaseClient extends events_1.EventEmitter {
|
|
|
177
167
|
},
|
|
178
168
|
});
|
|
179
169
|
// Once we have a non-5XX response, we will assertOk (either throwing or yielding the response)
|
|
180
|
-
return
|
|
170
|
+
return assertOk(resp);
|
|
181
171
|
}
|
|
182
172
|
catch (e) {
|
|
183
|
-
if (e instanceof
|
|
173
|
+
if (e instanceof ErrResponse) {
|
|
184
174
|
await __classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_classifyAndEmitError).call(this, e); // Emit appropriate events
|
|
185
175
|
}
|
|
186
176
|
throw e; // Rethrow the error
|
|
187
177
|
}
|
|
188
178
|
}
|
|
189
179
|
}
|
|
190
|
-
exports.BaseClient = BaseClient;
|
|
191
180
|
_BaseClient_targetOrgId = new WeakMap(), _BaseClient_preferredEnv = new WeakMap(), _BaseClient_instances = new WeakSet(), _BaseClient_applyOptions = function _BaseClient_applyOptions(token, opts) {
|
|
192
181
|
const pathParams = "path" in (opts.params ?? {}) ? opts.params?.path : undefined;
|
|
193
182
|
const baseUrl = this.env.SignerApiRoot.replace(/\/$/, "");
|
|
@@ -197,9 +186,9 @@ _BaseClient_targetOrgId = new WeakMap(), _BaseClient_preferredEnv = new WeakMap(
|
|
|
197
186
|
// If we have an activeSession, let it dictate the baseUrl. Otherwise fall back to the one set at construction
|
|
198
187
|
baseUrl,
|
|
199
188
|
...opts,
|
|
200
|
-
headers:
|
|
201
|
-
"User-Agent": browserUserAgent ?? `${
|
|
202
|
-
"X-Cubist-Ts-Sdk": `${
|
|
189
|
+
headers: mergeHeaders({
|
|
190
|
+
"User-Agent": browserUserAgent ?? `${NAME}@${VERSION}`,
|
|
191
|
+
"X-Cubist-Ts-Sdk": `${NAME}@${VERSION}`,
|
|
203
192
|
Origin: this.config.origin,
|
|
204
193
|
}, authHeader(token), this.config.headers, opts.headers),
|
|
205
194
|
params: {
|
|
@@ -218,11 +207,11 @@ _BaseClient_targetOrgId = new WeakMap(), _BaseClient_preferredEnv = new WeakMap(
|
|
|
218
207
|
*/
|
|
219
208
|
async function _BaseClient_classifyAndEmitError(err) {
|
|
220
209
|
this.emit("error", err);
|
|
221
|
-
|
|
210
|
+
ALL_EVENTS.emit("error", err);
|
|
222
211
|
if (err.isUserMfaError()) {
|
|
223
212
|
const ev = "user-mfa-failed";
|
|
224
213
|
this.emit(ev, err);
|
|
225
|
-
|
|
214
|
+
ALL_EVENTS.emit(ev, err);
|
|
226
215
|
}
|
|
227
216
|
// if status is 403 and error matches one of the "invalid session" error codes trigger onSessionExpired
|
|
228
217
|
//
|
|
@@ -232,7 +221,7 @@ async function _BaseClient_classifyAndEmitError(err) {
|
|
|
232
221
|
(err.isSessionExpiredError() || err.operation == "signerSessionRefresh")) {
|
|
233
222
|
const ev = "session-expired";
|
|
234
223
|
this.emit(ev, err);
|
|
235
|
-
|
|
224
|
+
ALL_EVENTS.emit(ev, err);
|
|
236
225
|
}
|
|
237
226
|
};
|
|
238
227
|
/**
|
|
@@ -244,7 +233,7 @@ async function _BaseClient_classifyAndEmitError(err) {
|
|
|
244
233
|
* @param ctx Additional manual overrides
|
|
245
234
|
* @returns SessionData with new information from info and ctx
|
|
246
235
|
*/
|
|
247
|
-
function signerSessionFromSessionInfo(meta, info, ctx) {
|
|
236
|
+
export function signerSessionFromSessionInfo(meta, info, ctx) {
|
|
248
237
|
return {
|
|
249
238
|
env: meta.env,
|
|
250
239
|
org_id: meta.org_id,
|
|
@@ -263,7 +252,7 @@ function signerSessionFromSessionInfo(meta, info, ctx) {
|
|
|
263
252
|
* @param token The "Authorization" header value
|
|
264
253
|
* @returns A {@link HeadersInit} object containing a single "Authorization" header with a given value.
|
|
265
254
|
*/
|
|
266
|
-
function authHeader(token) {
|
|
255
|
+
export function authHeader(token) {
|
|
267
256
|
return { Authorization: token };
|
|
268
257
|
}
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50L2Jhc2VfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1VQSxvRUFnQkM7QUE4QkQsZ0NBRUM7QUFuWEQsK0VBQStFO0FBQy9FLHNFQUFxQztBQUVyQyxvQ0FBb0M7QUFDcEMsb0NBQWlDO0FBQ2pDLHNDQUF5QztBQUN6QyxvQ0FBdUM7QUFFdkMsdUNBQW1GO0FBR25GLGlEQUE2QztBQUU3QyxrQ0FBa0M7QUFDckIsUUFBQSxJQUFJLEdBQVcsc0JBQUcsQ0FBQyxJQUFJLENBQUM7QUFFckMsNkJBQTZCO0FBQ2hCLFFBQUEsT0FBTyxHQUFXLHNCQUFHLENBQUMsT0FBTyxDQUFDO0FBSTNDLCtFQUErRTtBQUMvRSxNQUFhLG1CQUFtQjtDQUFHO0FBQW5DLGtEQUFtQztBQUVuQyx3RkFBd0Y7QUFDeEYsTUFBYSxrQkFBbUIsU0FBUSxtQkFBVztDQUFHO0FBQXRELGdEQUFzRDtBQVl0RDs7OztHQUlHO0FBQ1UsUUFBQSxVQUFVLEdBQStCLElBQUkscUJBQVksRUFBRSxDQUFDO0FBRXpFOzs7Ozs7R0FNRztBQUNILFNBQVMsU0FBUyxDQUFDLElBQWtCLEVBQUUsS0FBbUI7SUFDeEQsT0FBTyxDQUNMLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLGFBQWE7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxpQkFBaUI7UUFDbEQsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQzNCLFlBQXNDLEVBQ3RDLFdBQTRCO0lBRTVCLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUMsTUFB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QU8sRUFBRSxJQUFJLENBQUMsT0FBTztRQUNyQixHQUFHLEdBQUc7S0FDUCxDQUFDO0FBQ0osQ0FBQztBQXdCRDs7Ozs7R0FLRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE5PVEU6IGFkZCAnLy8gQHRzLW5vY2hlY2snIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlIHRvIHNwZWVkIHVwIHR5cGUgY2hlY2tpbmdcbmltcG9ydCBwa2cgZnJvbSBcIi4uLy4uL3BhY2thZ2UuanNvblwiO1xuaW1wb3J0IHR5cGUgeyBGZXRjaFJlc3BvbnNlU3VjY2Vzc0RhdGEsIE9wLCBPcGVyYXRpb24sIFNpbXBsZU9wdGlvbnMgfSBmcm9tIFwiLi4vZmV0Y2hcIjtcbmltcG9ydCB7IGFzc2VydE9rIH0gZnJvbSBcIi4uL2ZldGNoXCI7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gXCIuLi9yZXRyeVwiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgRXJyUmVzcG9uc2UgfSBmcm9tIFwiLi4vZXJyb3JcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkRhdGEsIFNlc3Npb25NYW5hZ2VyLCBTZXNzaW9uTWV0YWRhdGEgfSBmcm9tIFwiLi9zZXNzaW9uXCI7XG5pbXBvcnQgeyBNZW1vcnlTZXNzaW9uTWFuYWdlciwgbWV0YWRhdGEsIHBhcnNlQmFzZTY0U2Vzc2lvbkRhdGEgfSBmcm9tIFwiLi9zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IE5ld1Nlc3Npb25SZXNwb25zZSwgRXJyb3JSZXNwb25zZSB9IGZyb20gXCIuLi9zY2hlbWFfdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRW52SW50ZXJmYWNlIH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgbWVyZ2VIZWFkZXJzIH0gZnJvbSBcIm9wZW5hcGktZmV0Y2hcIjtcblxuLyoqIEN1YmVTaWduZXIgU0RLIHBhY2thZ2UgbmFtZSAqL1xuZXhwb3J0IGNvbnN0IE5BTUU6IHN0cmluZyA9IHBrZy5uYW1lO1xuXG4vKiogQ3ViZVNpZ25lciBTREsgdmVyc2lvbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT046IHN0cmluZyA9IHBrZy52ZXJzaW9uO1xuXG5leHBvcnQgdHlwZSBFcnJvckV2ZW50ID0gRXJyUmVzcG9uc2U7XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByZXF1ZXN0IGZhaWxzIGJlY2F1c2Ugb2YgYW4gZXhwaXJlZC9pbnZhbGlkIHNlc3Npb24gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRXhwaXJlZEV2ZW50IHt9XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByZXF1ZXN0IGZhaWxzIGJlY2F1c2UgdXNlciBmYWlsZWQgdG8gYW5zd2VyIGFuIE1GQSBjaGFsbGVuZ2UgKi9cbmV4cG9ydCBjbGFzcyBVc2VyTWZhRmFpbGVkRXZlbnQgZXh0ZW5kcyBFcnJSZXNwb25zZSB7fVxuXG50eXBlIENsaWVudEV2ZW50cyA9IHtcbiAgXCJ1c2VyLW1mYS1mYWlsZWRcIjogKGV2OiBVc2VyTWZhRmFpbGVkRXZlbnQpID0+IHZvaWQ7XG4gIFwic2Vzc2lvbi1leHBpcmVkXCI6IChldjogU2Vzc2lvbkV4cGlyZWRFdmVudCkgPT4gdm9pZDtcbiAgZXJyb3I6IChldjogRXJyb3JFdmVudCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgU3RhdGljQ2xpZW50U3ViY2xhc3M8VD4gPSB7XG4gIG5ldyAoLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBCYXNlQ2xpZW50Pik6IFQ7XG59ICYgdHlwZW9mIEJhc2VDbGllbnQ7XG5cbi8qKlxuICogQW4gZXZlbnQgZW1pdHRlciBmb3IgYWxsIGNsaWVudHNcbiAqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgY29uc3QgQUxMX0VWRU5UUzogRXZlbnRFbWl0dGVyPENsaWVudEV2ZW50cz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0d28gZW52aXJvbm1lbnQgZGVzY3JpcHRpb25zIHJlZmVyIHRvIHRoZSBzYW1lIEN1YmVTaWduZXIgZW52aXJvbm1lbnQuXG4gKlxuICogQHBhcmFtIGxlZnQgRmlyc3QgZW52aXJvbm1lbnQgdG8gY29tcGFyZVxuICogQHBhcmFtIHJpZ2h0IFNlY29uZCBlbnZpcm9ubWVudCB0byBjb21wYXJlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBlbnZpcm9ubWVudHMgYXJlIGVxdWl2YWxlbnRcbiAqL1xuZnVuY3Rpb24gZW52RXF1YWxzKGxlZnQ6IEVudkludGVyZmFjZSwgcmlnaHQ6IEVudkludGVyZmFjZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGxlZnQuU2lnbmVyQXBpUm9vdCA9PT0gcmlnaHQuU2lnbmVyQXBpUm9vdCAmJlxuICAgIGxlZnQuT3JnRXZlbnRzVG9waWNBcm4gPT09IHJpZ2h0Lk9yZ0V2ZW50c1RvcGljQXJuICYmXG4gICAgbGVmdC5SZWdpb24gPT09IHJpZ2h0LlJlZ2lvblxuICApO1xufVxuXG4vKipcbiAqIEVuc3VyZSBhIHByZWZlcnJlZCBlbnZpcm9ubWVudCBiZWxvbmdzIHRvIHRoZSBzZXNzaW9uJ3MgYWR2ZXJ0aXNlZCBlbnZpcm9ubWVudCBzZXQuXG4gKlxuICogQHBhcmFtIHByZWZlcnJlZEVudiBUaGUgY2FsbGVyLXJlcXVlc3RlZCBwcmVmZXJyZWQgZW52aXJvbm1lbnRcbiAqIEBwYXJhbSBzZXNzaW9uTWV0YSBUaGUgc2Vzc2lvbiBtZXRhZGF0YSB0aGF0IGxpc3RzIGFsbG93ZWQgZW52aXJvbm1lbnRzXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIHByZWZlcnJlZCBlbnZpcm9ubWVudCwgaWYgYW55XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJlZmVycmVkRW52KFxuICBwcmVmZXJyZWRFbnY6IEVudkludGVyZmFjZSB8IHVuZGVmaW5lZCxcbiAgc2Vzc2lvbk1ldGE6IFNlc3Npb25NZXRhZGF0YSxcbik6IEVudkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcmVmZXJyZWRFbnYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIU9iamVjdC52YWx1ZXMoc2Vzc2lvbk1ldGEuZW52KS5zb21lKChlbnYpID0+IGVudkVxdWFscyhlbnYsIHByZWZlcnJlZEVudikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBjdXJyZW50IHNlc3Npb24gZG9lcyBub3QgYWxsb3cgdGhlICcke3ByZWZlcnJlZEVudi5TaWduZXJBcGlSb290fScgZW52aXJvbm1lbnRgLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcHJlZmVycmVkRW52O1xufVxuXG4vKipcbiAqIENsaWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgLyoqIFVwZGF0ZSByZXRyeSBkZWxheXMgKGluIG1pbGxpc2Vjb25kcykgKi9cbiAgdXBkYXRlUmV0cnlEZWxheXNNczogbnVtYmVyW107XG5cbiAgLyoqIEN1c3RvbSBvcmlnaW4gdG8gc2V0IChOT1RFIHRoYXQgaWYgcnVubmluZyBpbiBhIGJyb3dzZXIsIHRoZSBicm93c2VyIHdpbGwgb3ZlcndyaXRlIHRoaXMpICovXG4gIG9yaWdpbj86IHN0cmluZztcblxuICAvKiogQWRkaXRpb25hbCBoZWFkZXJzIHRvIHNldCAoZGVmYXVsdCB0byBlbXB0eSkgKi9cbiAgaGVhZGVyczogSGVhZGVyc0luaXQ7XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIHJldHJ5IHN0cmF0ZWd5IGFuZCBzZXNzaW9uIHJlZnJlc2hlc1xuICovXG5leHBvcnQgY2xhc3MgQmFzZUNsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlcjxDbGllbnRFdmVudHM+IHtcbiAgLyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXNzaW9uIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGNsaWVudCAqL1xuICBzZXNzaW9uTWV0YTogU2Vzc2lvbk1ldGFkYXRhO1xuXG4gIC8qKiBTZXNzaW9uIHBlcnNpc3RlbmNlICovXG4gIHByb3RlY3RlZCBzZXNzaW9uTWFuYWdlcjogU2Vzc2lvbk1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBvcmcgaWQsIGkuZS4sIHRoZSBvcmdhbml6YXRpb24gdGhpcyBjbGllbnQgc2hvdWxkIG9wZXJhdGUgb24uXG4gICAqXG4gICAqIFRoZSBvbmx5IHNjZW5hcmlvIGluIHdoaWNoIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBhIHRhcmdldCBvcmdhbml6YXRpb25cbiAgICogZGlmZmVyZW50IGZyb20gdGhlIHNlc3Npb24gb3JnYW5pemF0aW9uIGlzIGlmIHRoZSB0YXJnZXQgb3JnYW5pemF0aW9uIGlzXG4gICAqIGEgY2hpbGQgb2YgdGhlIHNlc3Npb24gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgI3RhcmdldE9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIE1VVEFCTEUgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgY29uZmlnOiBDbGllbnRDb25maWc7XG5cbiAgcmVhZG9ubHkgI3ByZWZlcnJlZEVudjogRW52SW50ZXJmYWNlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBAcmV0dXJucyBUaGUgZW52ICovXG4gIGdldCBlbnYoKTogRW52SW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy4jcHJlZmVycmVkRW52ID8/IHRoaXMuc2Vzc2lvbk1ldGEuZW52W1wiRGV2LUN1YmVTaWduZXJTdGFja1wiXTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBBbGwgYXZhaWxhYmxlIHJlZ2lvbmFsIGVudmlyb25tZW50cyAqL1xuICBnZXQgZW52cygpOiBFbnZJbnRlcmZhY2VbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5zZXNzaW9uTWV0YS5lbnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGNsaWVudCB3aXRoIGEgc2Vzc2lvbiBvciBzZXNzaW9uIG1hbmFnZXJcbiAgICpcbiAgICogQHBhcmFtIHRoaXMgQWxsb3dzIHRoaXMgc3RhdGljIG1ldGhvZCB0byByZXR1cm4gc3VidHlwZXMgd2hlbiBpbnZva2VkIHRocm91Z2ggdGhlbVxuICAgKiBAcGFyYW0gc2Vzc2lvbiBUaGUgc2Vzc2lvbiAob2JqZWN0IG9yIGJhc2U2NCBzdHJpbmcpIG9yIG1hbmFnZXIgdGhhdCB3aWxsIGJhY2sgdGhpcyBjbGllbnRcbiAgICogQHBhcmFtIHRhcmdldE9yZ0lkIFRoZSBJRCBvZiB0aGUgb3JnYW5pemF0aW9uIHRoaXMgY2xpZW50IHNob3VsZCBvcGVyYXRlIG9uLiBEZWZhdWx0cyB0b1xuICAgKiAgIHRoZSBvcmcgaWQgZnJvbSB0aGUgc3VwcGxpZWQgc2Vzc2lvbi4gVGhlIG9ubHkgc2NlbmFyaW8gaW4gd2hpY2ggaXQgbWFrZXMgc2Vuc2UgdG8gdXNlXG4gICAqICAgYSB7QGxpbmsgdGFyZ2V0T3JnSWR9IGRpZmZlcmVudCBmcm9tIHRoZSBzZXNzaW9uIG9yZyBpZCBpcyBpZiB7QGxpbmsgdGFyZ2V0T3JnSWR9IGlzIGFcbiAgICogICBjaGlsZCBvcmdhbml6YXRpb24gb2YgdGhlIHNlc3Npb24gb3JnYW5pemF0aW9uLlxuICAgKiBAcmV0dXJucyBBIENsaWVudFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZTxUPihcbiAgICB0aGlzOiBTdGF0aWNDbGllbnRTdWJjbGFzczxUPixcbiAgICBzZXNzaW9uOiBzdHJpbmcgfCBTZXNzaW9uTWFuYWdlciB8IFNlc3Npb25EYXRhLFxuICAgIHRhcmdldE9yZ0lkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBzZXNzaW9uT2JqOiBTZXNzaW9uTWFuYWdlciB8IFNlc3Npb25EYXRhID1cbiAgICAgIHR5cGVvZiBzZXNzaW9uID09PSBcInN0cmluZ1wiID8gcGFyc2VCYXNlNjRTZXNzaW9uRGF0YShzZXNzaW9uKSA6IHNlc3Npb247XG5cbiAgICBpZiAodHlwZW9mIHNlc3Npb25PYmoudG9rZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgbWFuYWdlciA9IHNlc3Npb25PYmogYXMgU2Vzc2lvbk1hbmFnZXI7XG4gICAgICByZXR1cm4gbmV3IHRoaXMoYXdhaXQgbWFuYWdlci5tZXRhZGF0YSgpLCBtYW5hZ2VyLCB0YXJnZXRPcmdJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlc3Npb24gPSBzZXNzaW9uT2JqIGFzIFNlc3Npb25EYXRhO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKG1ldGFkYXRhKHNlc3Npb24pLCBuZXcgTWVtb3J5U2Vzc2lvbk1hbmFnZXIoc2Vzc2lvbiksIHRhcmdldE9yZ0lkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNlc3Npb25NZXRhIFRoZSBpbml0aWFsIHNlc3Npb24gbWV0YWRhdGFcbiAgICogQHBhcmFtIG1hbmFnZXIgVGhlIG1hbmFnZXIgZm9yIHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICogQHBhcmFtIHRhcmdldE9yZ0lkIFRoZSBJRCBvZiB0aGUgb3JnYW5pemF0aW9uIHRoaXMgY2xpZW50IHNob3VsZCBvcGVyYXRlIG9uLiBEZWZhdWx0cyB0b1xuICAgKiAgIHRoZSBvcmcgaWQgZnJvbSB0aGUgc3VwcGxpZWQgc2Vzc2lvbi4gVGhlIG9ubHkgc2NlbmFyaW8gaW4gd2hpY2ggaXQgbWFrZXMgc2Vuc2UgdG8gdXNlXG4gICAqICAgYSB7QGxpbmsgdGFyZ2V0T3JnSWR9IGRpZmZlcmVudCBmcm9tIHRoZSBzZXNzaW9uIG9yZyBpZCBpcyBpZiB7QGxpbmsgdGFyZ2V0T3JnSWR9IGlzIGFcbiAgICogICBjaGlsZCBvcmdhbml6YXRpb24gb2YgdGhlIHNlc3Npb24gb3JnYW5pemF0aW9uLlxuICAgKiBAcGFyYW0gY29uZmlnIENsaWVudCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2Vzc2lvbk1ldGE6IFNlc3Npb25NZXRhZGF0YSxcbiAgICBtYW5hZ2VyOiBTZXNzaW9uTWFuYWdlcixcbiAgICB0YXJnZXRPcmdJZD86IHN0cmluZyxcbiAgICBjb25maWc/OiBDbGllbnRDb25maWcgJiB7XG4gICAgICBwcmVmZXJyZWRFbnY/OiBFbnZJbnRlcmZhY2U7XG4gICAgfSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiN0YXJnZXRPcmdJZCA9IHRhcmdldE9yZ0lkO1xuICAgIHRoaXMuI3ByZWZlcnJlZEVudiA9IHZhbGlkYXRlUHJlZmVycmVkRW52KGNvbmZpZz8ucHJlZmVycmVkRW52LCBzZXNzaW9uTWV0YSk7XG4gICAgdGhpcy5zZXNzaW9uTWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXNzaW9uTWV0YSA9IHNlc3Npb25NZXRhO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgdXBkYXRlUmV0cnlEZWxheXNNczogWzEwMCwgMjAwLCA0MDBdLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICBvcmlnaW46IHVuZGVmaW5lZCxcbiAgICAgIC4uLihjb25maWcgPz8ge30pLFxuICAgIH07XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIG9yZ2FuaXphdGlvbiBJRC4gSWYgdGhlIG9yZyBJRCB3YXMgc2V0IGV4cGxpY2l0bHksIGl0IHJldHVybnMgdGhhdCBJRDsgb3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIHNlc3Npb24ncyBvcmdhbml6YXRpb24gSUQuICovXG4gIGdldCBvcmdJZCgpIHtcbiAgICByZXR1cm4gdGhpcy4jdGFyZ2V0T3JnSWQgPz8gdGhpcy5zZXNzaW9uTWV0YS5vcmdfaWQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHNlc3Npb24ncyBpbXBsaWNpdCBhcmd1bWVudHMgb24gdG9wIG9mIHdoYXQgd2FzIHByb3ZpZGVkXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgYXV0aG9yaXphdGlvbiB0b2tlbiB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBwYXJhbSBvcHRzIFRoZSB1c2VyLXN1cHBsaWVkIG9wdHNcbiAgICogQHJldHVybnMgVGhlIHVuaW9uIG9mIHRoZSB1c2VyLXN1cHBsaWVkIG9wdHMgYW5kIHRoZSBkZWZhdWx0IG9uZXNcbiAgICovXG4gICNhcHBseU9wdGlvbnM8VCBleHRlbmRzIE9wZXJhdGlvbj4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBvcHRzOiBPbWl0QXV0b1BhcmFtczxTaW1wbGVPcHRpb25zPFQ+PixcbiAgKTogU2ltcGxlT3B0aW9uczxUPiB7XG4gICAgY29uc3QgcGF0aFBhcmFtcyA9IFwicGF0aFwiIGluIChvcHRzLnBhcmFtcyA/PyB7fSkgPyBvcHRzLnBhcmFtcz8ucGF0aCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5lbnYuU2lnbmVyQXBpUm9vdC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gICAgY29uc3QgYnJvd3NlclVzZXJBZ2VudCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyBuYXZpZ2F0b3I/LnVzZXJBZ2VudCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgY2FjaGU6IFwibm8tc3RvcmVcIixcbiAgICAgIC8vIElmIHdlIGhhdmUgYW4gYWN0aXZlU2Vzc2lvbiwgbGV0IGl0IGRpY3RhdGUgdGhlIGJhc2VVcmwuIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIG9uZSBzZXQgYXQgY29uc3RydWN0aW9uXG4gICAgICBiYXNlVXJsLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIGhlYWRlcnM6IG1lcmdlSGVhZGVycyhcbiAgICAgICAge1xuICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBicm93c2VyVXNlckFnZW50ID8/IGAke05BTUV9QCR7VkVSU0lPTn1gLFxuICAgICAgICAgIFwiWC1DdWJpc3QtVHMtU2RrXCI6IGAke05BTUV9QCR7VkVSU0lPTn1gLFxuICAgICAgICAgIE9yaWdpbjogdGhpcy5jb25maWcub3JpZ2luLFxuICAgICAgICB9LFxuICAgICAgICBhdXRoSGVhZGVyKHRva2VuKSxcbiAgICAgICAgdGhpcy5jb25maWcuaGVhZGVycyxcbiAgICAgICAgb3B0cy5oZWFkZXJzLFxuICAgICAgKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICAuLi5vcHRzLnBhcmFtcyxcbiAgICAgICAgcGF0aDoge1xuICAgICAgICAgIG9yZ19pZDogdGhpcy5vcmdJZCxcbiAgICAgICAgICAuLi5wYXRoUGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgU2ltcGxlT3B0aW9uczxUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBzcGVjaWZpYyBlcnJvciBldmVudHMgd2hlbiBhIHJlcXVlc3QgZmFpbGVkXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHRvIGNsYXNzaWZ5XG4gICAqL1xuICBhc3luYyAjY2xhc3NpZnlBbmRFbWl0RXJyb3IoZXJyOiBFcnJvckV2ZW50KSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICBBTExfRVZFTlRTLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuXG4gICAgaWYgKGVyci5pc1VzZXJNZmFFcnJvcigpKSB7XG4gICAgICBjb25zdCBldiA9IFwidXNlci1tZmEtZmFpbGVkXCI7XG4gICAgICB0aGlzLmVtaXQoZXYsIGVycik7XG4gICAgICBBTExfRVZFTlRTLmVtaXQoZXYsIGVycik7XG4gICAgfVxuXG4gICAgLy8gaWYgc3RhdHVzIGlzIDQwMyBhbmQgZXJyb3IgbWF0Y2hlcyBvbmUgb2YgdGhlIFwiaW52YWxpZCBzZXNzaW9uXCIgZXJyb3IgY29kZXMgdHJpZ2dlciBvblNlc3Npb25FeHBpcmVkXG4gICAgLy9cbiAgICAvLyBUT0RPOiBiZWNhdXNlIGVycm9ycyByZXR1cm5lZCBieSB0aGUgYXV0aG9yaXplciBsYW1iZGEgYXJlIG5vdCBmb3J3YXJkZWQgdG8gdGhlIGNsaWVudFxuICAgIC8vICAgICAgIHdlIGFsc28gdHJpZ2dlciBvblNlc3Npb25FeHBpcmVkIHdoZW4gXCJzaWduZXJTZXNzaW9uUmVmcmVzaFwiIGZhaWxzXG4gICAgaWYgKFxuICAgICAgZXJyLnN0YXR1cyA9PT0gNDAzICYmXG4gICAgICAoZXJyLmlzU2Vzc2lvbkV4cGlyZWRFcnJvcigpIHx8IGVyci5vcGVyYXRpb24gPT0gXCJzaWduZXJTZXNzaW9uUmVmcmVzaFwiKVxuICAgICkge1xuICAgICAgY29uc3QgZXYgPSBcInNlc3Npb24tZXhwaXJlZFwiO1xuICAgICAgdGhpcy5lbWl0KGV2LCBlcnIpO1xuICAgICAgQUxMX0VWRU5UUy5lbWl0KGV2LCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhbiBvcCB1c2luZyB0aGUgc3RhdGUgb2YgdGhlIGNsaWVudCAoYXV0aCBoZWFkZXJzICYgb3JnX2lkKSB3aXRoIHJldHJpZXNcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBvcCBUaGUgQVBJIG9wZXJhdGlvbiB5b3Ugd2lzaCB0byBwZXJmb3JtXG4gICAqIEBwYXJhbSBvcHRzIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgb3BlcmF0aW9uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgdGhlIHN1Y2Nlc3NmdWwgcmVzdWx0IChlcnJvcnMgd2lsbCBiZSB0aHJvd24pXG4gICAqL1xuICBhc3luYyBleGVjPFQgZXh0ZW5kcyBPcGVyYXRpb24+KFxuICAgIG9wOiBPcDxUPixcbiAgICBvcHRzOiBPbWl0QXV0b1BhcmFtczxTaW1wbGVPcHRpb25zPFQ+PixcbiAgKTogUHJvbWlzZTxGZXRjaFJlc3BvbnNlU3VjY2Vzc0RhdGE8VD4+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5zZXNzaW9uTWFuYWdlci50b2tlbigpO1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHJldHJ5KCgpID0+IG9wKHRoaXMuI2FwcGx5T3B0aW9ucyh0b2tlbiwgb3B0cykpLCB7XG4gICAgICAgIHByZWQ6IGFzeW5jIChyZXNwKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcC5yZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNwLmVycm9yIGFzIEVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gZXJyb3I/LnJlcXVlc3RfaWQ7XG5cbiAgICAgICAgICAvLyBJZiB3ZSBnZXQgYSBcIkZvcmJpZGRlblwiIGVycm9yLCBlcmFzZSB0aGUgY2FjaGVkIHRva2VuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUT0RPOiBDaGVjayBlcnJvciBjb2RlcyBvbmNlIG91ciBBUEkgcmV0dXJucyBlcnJvciBjb2RlcyBmb3JcbiAgICAgICAgICAvLyBhdXRob3JpemF0aW9uIGZhaWx1cmVzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhdHVzID09PSA0MDMgJiZcbiAgICAgICAgICAgIHJlcXVlc3RJZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25NYW5hZ2VyLm9uSW52YWxpZFRva2VuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIub25JbnZhbGlkVG9rZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFRva2VuID0gdG9rZW47XG4gICAgICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMuc2Vzc2lvbk1hbmFnZXIudG9rZW4oKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiAhPT0gb2xkVG9rZW47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWxzbyByZXRyeSBzZXJ2ZXItc2lkZSBlcnJvcnNcbiAgICAgICAgICByZXR1cm4gc3RhdHVzID49IDUwMCAmJiBzdGF0dXMgPCA2MDA7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBhIG5vbi01WFggcmVzcG9uc2UsIHdlIHdpbGwgYXNzZXJ0T2sgKGVpdGhlciB0aHJvd2luZyBvciB5aWVsZGluZyB0aGUgcmVzcG9uc2UpXG4gICAgICByZXR1cm4gYXNzZXJ0T2socmVzcCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJSZXNwb25zZSkge1xuICAgICAgICBhd2FpdCB0aGlzLiNjbGFzc2lmeUFuZEVtaXRFcnJvcihlKTsgLy8gRW1pdCBhcHByb3ByaWF0ZSBldmVudHNcbiAgICAgIH1cbiAgICAgIHRocm93IGU7IC8vIFJldGhyb3cgdGhlIGVycm9yXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBncmFkZSBhIHNlc3Npb24gcmVzcG9uc2UgaW50byBhIGZ1bGwgU2Vzc2lvbkRhdGEgYnkgaW5jb3Jwb3JhdGluZ1xuICogZWxlbWVudHMgb2YgYW4gZXhpc3RpbmcgU2Vzc2lvbkRhdGFcbiAqXG4gKiBAcGFyYW0gbWV0YSBBbiBleGlzdGluZyBTZXNzaW9uRGF0YVxuICogQHBhcmFtIGluZm8gQSBuZXcgc2Vzc2lvbiBjcmVhdGVkIHZpYSB0aGUgQVBJXG4gKiBAcGFyYW0gY3R4IEFkZGl0aW9uYWwgbWFudWFsIG92ZXJyaWRlc1xuICogQHJldHVybnMgU2Vzc2lvbkRhdGEgd2l0aCBuZXcgaW5mb3JtYXRpb24gZnJvbSBpbmZvIGFuZCBjdHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25lclNlc3Npb25Gcm9tU2Vzc2lvbkluZm8oXG4gIG1ldGE6IFNlc3Npb25NZXRhZGF0YSxcbiAgaW5mbzogTmV3U2Vzc2lvblJlc3BvbnNlLFxuICBjdHg6IFBhcnRpYWw8eyBwdXJwb3NlOiBzdHJpbmc7IHJvbGVfaWQ6IHN0cmluZzsgb3JnX2lkOiBzdHJpbmcgfT4sXG4pOiBTZXNzaW9uRGF0YSB7XG4gIHJldHVybiB7XG4gICAgZW52OiBtZXRhLmVudixcbiAgICBvcmdfaWQ6IG1ldGEub3JnX2lkLFxuICAgIHNlc3Npb25fZXhwOiBpbmZvLmV4cGlyYXRpb24sXG4gICAgc2Vzc2lvbl9pbmZvOiBpbmZvLnNlc3Npb25faW5mbyxcbiAgICB0b2tlbjogaW5mby50b2tlbixcbiAgICByZWZyZXNoX3Rva2VuOiBpbmZvLnJlZnJlc2hfdG9rZW4sXG4gICAgcHVycG9zZTogbWV0YS5wdXJwb3NlLFxuICAgIHJvbGVfaWQ6IG1ldGEucm9sZV9pZCxcbiAgICAuLi5jdHgsXG4gIH07XG59XG5cbnR5cGUgRGVlcE9taXQ8QSwgQj4gPSBbQSwgQl0gZXh0ZW5kcyBbb2JqZWN0LCBvYmplY3RdXG4gID8ge1xuICAgICAgW0sgaW4ga2V5b2YgQSBhcyBLIGV4dGVuZHMga2V5b2YgQiAvLyBJZiB0aGUga2V5IGlzIGluIGJvdGggQSBhbmQgQlxuICAgICAgICA/IEFbS10gZXh0ZW5kcyBCW0tdXG4gICAgICAgICAgPyBLIC8vXG4gICAgICAgICAgOiBuZXZlclxuICAgICAgICA6IG5ldmVyXT86IEsgZXh0ZW5kcyBrZXlvZiBCID8gRGVlcE9taXQ8QVtLXSwgQltLXT4gOiBuZXZlcjtcbiAgICB9ICYge1xuICAgICAgW0sgaW4ga2V5b2YgQSBhcyBLIGV4dGVuZHMga2V5b2YgQiA/IChCW0tdIGV4dGVuZHMgQVtLXSA/IG5ldmVyIDogSykgOiBLXTogSyBleHRlbmRzIGtleW9mIEJcbiAgICAgICAgPyBEZWVwT21pdDxBW0tdLCBCW0tdPlxuICAgICAgICA6IEFbS107XG4gICAgfVxuICA6IEE7XG5cbmV4cG9ydCB0eXBlIE9taXRBdXRvUGFyYW1zPE8+ID0gRGVlcE9taXQ8XG4gIE8sXG4gIHtcbiAgICBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcGFyYW1zOiB7IHBhdGg6IHsgb3JnX2lkOiBzdHJpbmcgfSB9O1xuICB9XG4+ICYgeyBwYXJhbXM/OiB7IHBhdGg/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IH07XG5cbi8qKlxuICogQ3JlYXRlcyB7QGxpbmsgSGVhZGVyc0luaXR9IGNvbnRhaW5pbmcgYSBzaW5nbGUgXCJBdXRob3JpemF0aW9uXCIgaGVhZGVyIHdpdGggYSBnaXZlbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdG9rZW4gVGhlIFwiQXV0aG9yaXphdGlvblwiIGhlYWRlciB2YWx1ZVxuICogQHJldHVybnMgQSB7QGxpbmsgSGVhZGVyc0luaXR9IG9iamVjdCBjb250YWluaW5nIGEgc2luZ2xlIFwiQXV0aG9yaXphdGlvblwiIGhlYWRlciB3aXRoIGEgZ2l2ZW4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdXRoSGVhZGVyKHRva2VuOiBzdHJpbmcpOiBIZWFkZXJzSW5pdCB7XG4gIHJldHVybiB7IEF1dGhvcml6YXRpb246IHRva2VuIH07XG59XG4iXX0=
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50L2Jhc2VfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLCtFQUErRTtBQUMvRSxPQUFPLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFFckMsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBVyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBSTNDLCtFQUErRTtBQUMvRSxNQUFNLE9BQU8sbUJBQW1CO0NBQUc7QUFFbkMsd0ZBQXdGO0FBQ3hGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxXQUFXO0NBQUc7QUFZdEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBK0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUV6RTs7Ozs7O0dBTUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFrQixFQUFFLEtBQW1CO0lBQ3hELE9BQU8sQ0FDTCxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxhQUFhO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxL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RUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1FBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztRQUNqQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7UUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztRQUNyQixHQUFHLEdBQUc7S0FDUCxDQUFDO0FBQ0osQ0FBQztBQXdCRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOT1RFOiBhZGQgJy8vIEB0cy1ub2NoZWNrJyBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZSB0byBzcGVlZCB1cCB0eXBlIGNoZWNraW5nXG5pbXBvcnQgcGtnIGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCB0eXBlIHsgRmV0Y2hSZXNwb25zZVN1Y2Nlc3NEYXRhLCBPcCwgT3BlcmF0aW9uLCBTaW1wbGVPcHRpb25zIH0gZnJvbSBcIi4uL2ZldGNoLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRPayB9IGZyb20gXCIuLi9mZXRjaC50c1wiO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tIFwiLi4vcmV0cnkudHNcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCIuLi9ldmVudHMudHNcIjtcbmltcG9ydCB7IEVyclJlc3BvbnNlIH0gZnJvbSBcIi4uL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25EYXRhLCBTZXNzaW9uTWFuYWdlciwgU2Vzc2lvbk1ldGFkYXRhIH0gZnJvbSBcIi4vc2Vzc2lvbi50c1wiO1xuaW1wb3J0IHsgTWVtb3J5U2Vzc2lvbk1hbmFnZXIsIG1ldGFkYXRhLCBwYXJzZUJhc2U2NFNlc3Npb25EYXRhIH0gZnJvbSBcIi4vc2Vzc2lvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBOZXdTZXNzaW9uUmVzcG9uc2UsIEVycm9yUmVzcG9uc2UgfSBmcm9tIFwiLi4vc2NoZW1hX3R5cGVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVudkludGVyZmFjZSB9IGZyb20gXCIuLi9lbnYudHNcIjtcbmltcG9ydCB7IG1lcmdlSGVhZGVycyB9IGZyb20gXCJvcGVuYXBpLWZldGNoXCI7XG5cbi8qKiBDdWJlU2lnbmVyIFNESyBwYWNrYWdlIG5hbWUgKi9cbmV4cG9ydCBjb25zdCBOQU1FOiBzdHJpbmcgPSBwa2cubmFtZTtcblxuLyoqIEN1YmVTaWduZXIgU0RLIHZlcnNpb24gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OOiBzdHJpbmcgPSBwa2cudmVyc2lvbjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFdmVudCA9IEVyclJlc3BvbnNlO1xuXG4vKiogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcmVxdWVzdCBmYWlscyBiZWNhdXNlIG9mIGFuIGV4cGlyZWQvaW52YWxpZCBzZXNzaW9uICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkV4cGlyZWRFdmVudCB7fVxuXG4vKiogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcmVxdWVzdCBmYWlscyBiZWNhdXNlIHVzZXIgZmFpbGVkIHRvIGFuc3dlciBhbiBNRkEgY2hhbGxlbmdlICovXG5leHBvcnQgY2xhc3MgVXNlck1mYUZhaWxlZEV2ZW50IGV4dGVuZHMgRXJyUmVzcG9uc2Uge31cblxudHlwZSBDbGllbnRFdmVudHMgPSB7XG4gIFwidXNlci1tZmEtZmFpbGVkXCI6IChldjogVXNlck1mYUZhaWxlZEV2ZW50KSA9PiB2b2lkO1xuICBcInNlc3Npb24tZXhwaXJlZFwiOiAoZXY6IFNlc3Npb25FeHBpcmVkRXZlbnQpID0+IHZvaWQ7XG4gIGVycm9yOiAoZXY6IEVycm9yRXZlbnQpID0+IHZvaWQ7XG59O1xuXG50eXBlIFN0YXRpY0NsaWVudFN1YmNsYXNzPFQ+ID0ge1xuICBuZXcgKC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgQmFzZUNsaWVudD4pOiBUO1xufSAmIHR5cGVvZiBCYXNlQ2xpZW50O1xuXG4vKipcbiAqIEFuIGV2ZW50IGVtaXR0ZXIgZm9yIGFsbCBjbGllbnRzXG4gKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9FVkVOVFM6IEV2ZW50RW1pdHRlcjxDbGllbnRFdmVudHM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdHdvIGVudmlyb25tZW50IGRlc2NyaXB0aW9ucyByZWZlciB0byB0aGUgc2FtZSBDdWJlU2lnbmVyIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBsZWZ0IEZpcnN0IGVudmlyb25tZW50IHRvIGNvbXBhcmVcbiAqIEBwYXJhbSByaWdodCBTZWNvbmQgZW52aXJvbm1lbnQgdG8gY29tcGFyZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgZW52aXJvbm1lbnRzIGFyZSBlcXVpdmFsZW50XG4gKi9cbmZ1bmN0aW9uIGVudkVxdWFscyhsZWZ0OiBFbnZJbnRlcmZhY2UsIHJpZ2h0OiBFbnZJbnRlcmZhY2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBsZWZ0LlNpZ25lckFwaVJvb3QgPT09IHJpZ2h0LlNpZ25lckFwaVJvb3QgJiZcbiAgICBsZWZ0Lk9yZ0V2ZW50c1RvcGljQXJuID09PSByaWdodC5PcmdFdmVudHNUb3BpY0FybiAmJlxuICAgIGxlZnQuUmVnaW9uID09PSByaWdodC5SZWdpb25cbiAgKTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBwcmVmZXJyZWQgZW52aXJvbm1lbnQgYmVsb25ncyB0byB0aGUgc2Vzc2lvbidzIGFkdmVydGlzZWQgZW52aXJvbm1lbnQgc2V0LlxuICpcbiAqIEBwYXJhbSBwcmVmZXJyZWRFbnYgVGhlIGNhbGxlci1yZXF1ZXN0ZWQgcHJlZmVycmVkIGVudmlyb25tZW50XG4gKiBAcGFyYW0gc2Vzc2lvbk1ldGEgVGhlIHNlc3Npb24gbWV0YWRhdGEgdGhhdCBsaXN0cyBhbGxvd2VkIGVudmlyb25tZW50c1xuICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBwcmVmZXJyZWQgZW52aXJvbm1lbnQsIGlmIGFueVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByZWZlcnJlZEVudihcbiAgcHJlZmVycmVkRW52OiBFbnZJbnRlcmZhY2UgfCB1bmRlZmluZWQsXG4gIHNlc3Npb25NZXRhOiBTZXNzaW9uTWV0YWRhdGEsXG4pOiBFbnZJbnRlcmZhY2UgfCB1bmRlZmluZWQge1xuICBpZiAocHJlZmVycmVkRW52ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFPYmplY3QudmFsdWVzKHNlc3Npb25NZXRhLmVudikuc29tZSgoZW52KSA9PiBlbnZFcXVhbHMoZW52LCBwcmVmZXJyZWRFbnYpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgY3VycmVudCBzZXNzaW9uIGRvZXMgbm90IGFsbG93IHRoZSAnJHtwcmVmZXJyZWRFbnYuU2lnbmVyQXBpUm9vdH0nIGVudmlyb25tZW50YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHByZWZlcnJlZEVudjtcbn1cblxuLyoqXG4gKiBDbGllbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIC8qKiBVcGRhdGUgcmV0cnkgZGVsYXlzIChpbiBtaWxsaXNlY29uZHMpICovXG4gIHVwZGF0ZVJldHJ5RGVsYXlzTXM6IG51bWJlcltdO1xuXG4gIC8qKiBDdXN0b20gb3JpZ2luIHRvIHNldCAoTk9URSB0aGF0IGlmIHJ1bm5pbmcgaW4gYSBicm93c2VyLCB0aGUgYnJvd3NlciB3aWxsIG92ZXJ3cml0ZSB0aGlzKSAqL1xuICBvcmlnaW4/OiBzdHJpbmc7XG5cbiAgLyoqIEFkZGl0aW9uYWwgaGVhZGVycyB0byBzZXQgKGRlZmF1bHQgdG8gZW1wdHkpICovXG4gIGhlYWRlcnM6IEhlYWRlcnNJbml0O1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSByZXRyeSBzdHJhdGVneSBhbmQgc2Vzc2lvbiByZWZyZXNoZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8Q2xpZW50RXZlbnRzPiB7XG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc2Vzc2lvbiBjb250YWluZWQgd2l0aGluIHRoZSBjbGllbnQgKi9cbiAgc2Vzc2lvbk1ldGE6IFNlc3Npb25NZXRhZGF0YTtcblxuICAvKiogU2Vzc2lvbiBwZXJzaXN0ZW5jZSAqL1xuICBwcm90ZWN0ZWQgc2Vzc2lvbk1hbmFnZXI6IFNlc3Npb25NYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBUYXJnZXQgb3JnIGlkLCBpLmUuLCB0aGUgb3JnYW5pemF0aW9uIHRoaXMgY2xpZW50IHNob3VsZCBvcGVyYXRlIG9uLlxuICAgKlxuICAgKiBUaGUgb25seSBzY2VuYXJpbyBpbiB3aGljaCBpdCBtYWtlcyBzZW5zZSB0byB1c2UgYSB0YXJnZXQgb3JnYW5pemF0aW9uXG4gICAqIGRpZmZlcmVudCBmcm9tIHRoZSBzZXNzaW9uIG9yZ2FuaXphdGlvbiBpcyBpZiB0aGUgdGFyZ2V0IG9yZ2FuaXphdGlvbiBpc1xuICAgKiBhIGNoaWxkIG9mIHRoZSBzZXNzaW9uIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gICN0YXJnZXRPcmdJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNVVRBQkxFIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGNvbmZpZzogQ2xpZW50Q29uZmlnO1xuXG4gIHJlYWRvbmx5ICNwcmVmZXJyZWRFbnY6IEVudkludGVyZmFjZSB8IHVuZGVmaW5lZDtcblxuICAvKiogQHJldHVybnMgVGhlIGVudiAqL1xuICBnZXQgZW52KCk6IEVudkludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMuI3ByZWZlcnJlZEVudiA/PyB0aGlzLnNlc3Npb25NZXRhLmVudltcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl07XG4gIH1cblxuICAvKiogQHJldHVybnMgQWxsIGF2YWlsYWJsZSByZWdpb25hbCBlbnZpcm9ubWVudHMgKi9cbiAgZ2V0IGVudnMoKTogRW52SW50ZXJmYWNlW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2Vzc2lvbk1ldGEuZW52KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBjbGllbnQgd2l0aCBhIHNlc3Npb24gb3Igc2Vzc2lvbiBtYW5hZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB0aGlzIEFsbG93cyB0aGlzIHN0YXRpYyBtZXRob2QgdG8gcmV0dXJuIHN1YnR5cGVzIHdoZW4gaW52b2tlZCB0aHJvdWdoIHRoZW1cbiAgICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gKG9iamVjdCBvciBiYXNlNjQgc3RyaW5nKSBvciBtYW5hZ2VyIHRoYXQgd2lsbCBiYWNrIHRoaXMgY2xpZW50XG4gICAqIEBwYXJhbSB0YXJnZXRPcmdJZCBUaGUgSUQgb2YgdGhlIG9yZ2FuaXphdGlvbiB0aGlzIGNsaWVudCBzaG91bGQgb3BlcmF0ZSBvbi4gRGVmYXVsdHMgdG9cbiAgICogICB0aGUgb3JnIGlkIGZyb20gdGhlIHN1cHBsaWVkIHNlc3Npb24uIFRoZSBvbmx5IHNjZW5hcmlvIGluIHdoaWNoIGl0IG1ha2VzIHNlbnNlIHRvIHVzZVxuICAgKiAgIGEge0BsaW5rIHRhcmdldE9yZ0lkfSBkaWZmZXJlbnQgZnJvbSB0aGUgc2Vzc2lvbiBvcmcgaWQgaXMgaWYge0BsaW5rIHRhcmdldE9yZ0lkfSBpcyBhXG4gICAqICAgY2hpbGQgb3JnYW5pemF0aW9uIG9mIHRoZSBzZXNzaW9uIG9yZ2FuaXphdGlvbi5cbiAgICogQHJldHVybnMgQSBDbGllbnRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGU8VD4oXG4gICAgdGhpczogU3RhdGljQ2xpZW50U3ViY2xhc3M8VD4sXG4gICAgc2Vzc2lvbjogc3RyaW5nIHwgU2Vzc2lvbk1hbmFnZXIgfCBTZXNzaW9uRGF0YSxcbiAgICB0YXJnZXRPcmdJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qgc2Vzc2lvbk9iajogU2Vzc2lvbk1hbmFnZXIgfCBTZXNzaW9uRGF0YSA9XG4gICAgICB0eXBlb2Ygc2Vzc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQmFzZTY0U2Vzc2lvbkRhdGEoc2Vzc2lvbikgOiBzZXNzaW9uO1xuXG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uT2JqLnRva2VuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBzZXNzaW9uT2JqIGFzIFNlc3Npb25NYW5hZ2VyO1xuICAgICAgcmV0dXJuIG5ldyB0aGlzKGF3YWl0IG1hbmFnZXIubWV0YWRhdGEoKSwgbWFuYWdlciwgdGFyZ2V0T3JnSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXNzaW9uID0gc2Vzc2lvbk9iaiBhcyBTZXNzaW9uRGF0YTtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhtZXRhZGF0YShzZXNzaW9uKSwgbmV3IE1lbW9yeVNlc3Npb25NYW5hZ2VyKHNlc3Npb24pLCB0YXJnZXRPcmdJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzZXNzaW9uTWV0YSBUaGUgaW5pdGlhbCBzZXNzaW9uIG1ldGFkYXRhXG4gICAqIEBwYXJhbSBtYW5hZ2VyIFRoZSBtYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAqIEBwYXJhbSB0YXJnZXRPcmdJZCBUaGUgSUQgb2YgdGhlIG9yZ2FuaXphdGlvbiB0aGlzIGNsaWVudCBzaG91bGQgb3BlcmF0ZSBvbi4gRGVmYXVsdHMgdG9cbiAgICogICB0aGUgb3JnIGlkIGZyb20gdGhlIHN1cHBsaWVkIHNlc3Npb24uIFRoZSBvbmx5IHNjZW5hcmlvIGluIHdoaWNoIGl0IG1ha2VzIHNlbnNlIHRvIHVzZVxuICAgKiAgIGEge0BsaW5rIHRhcmdldE9yZ0lkfSBkaWZmZXJlbnQgZnJvbSB0aGUgc2Vzc2lvbiBvcmcgaWQgaXMgaWYge0BsaW5rIHRhcmdldE9yZ0lkfSBpcyBhXG4gICAqICAgY2hpbGQgb3JnYW5pemF0aW9uIG9mIHRoZSBzZXNzaW9uIG9yZ2FuaXphdGlvbi5cbiAgICogQHBhcmFtIGNvbmZpZyBDbGllbnQgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNlc3Npb25NZXRhOiBTZXNzaW9uTWV0YWRhdGEsXG4gICAgbWFuYWdlcjogU2Vzc2lvbk1hbmFnZXIsXG4gICAgdGFyZ2V0T3JnSWQ/OiBzdHJpbmcsXG4gICAgY29uZmlnPzogQ2xpZW50Q29uZmlnICYge1xuICAgICAgcHJlZmVycmVkRW52PzogRW52SW50ZXJmYWNlO1xuICAgIH0sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jdGFyZ2V0T3JnSWQgPSB0YXJnZXRPcmdJZDtcbiAgICB0aGlzLiNwcmVmZXJyZWRFbnYgPSB2YWxpZGF0ZVByZWZlcnJlZEVudihjb25maWc/LnByZWZlcnJlZEVudiwgc2Vzc2lvbk1ldGEpO1xuICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2Vzc2lvbk1ldGEgPSBzZXNzaW9uTWV0YTtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHVwZGF0ZVJldHJ5RGVsYXlzTXM6IFsxMDAsIDIwMCwgNDAwXSxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgICAuLi4oY29uZmlnID8/IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBvcmdhbml6YXRpb24gSUQuIElmIHRoZSBvcmcgSUQgd2FzIHNldCBleHBsaWNpdGx5LCBpdCByZXR1cm5zIHRoYXQgSUQ7IG90aGVyd2lzZSBpdCByZXR1cm5zIHRoZSBzZXNzaW9uJ3Mgb3JnYW5pemF0aW9uIElELiAqL1xuICBnZXQgb3JnSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3RhcmdldE9yZ0lkID8/IHRoaXMuc2Vzc2lvbk1ldGEub3JnX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBzZXNzaW9uJ3MgaW1wbGljaXQgYXJndW1lbnRzIG9uIHRvcCBvZiB3aGF0IHdhcyBwcm92aWRlZFxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gVGhlIGF1dGhvcml6YXRpb24gdG9rZW4gdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gb3B0cyBUaGUgdXNlci1zdXBwbGllZCBvcHRzXG4gICAqIEByZXR1cm5zIFRoZSB1bmlvbiBvZiB0aGUgdXNlci1zdXBwbGllZCBvcHRzIGFuZCB0aGUgZGVmYXVsdCBvbmVzXG4gICAqL1xuICAjYXBwbHlPcHRpb25zPFQgZXh0ZW5kcyBPcGVyYXRpb24+KFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgb3B0czogT21pdEF1dG9QYXJhbXM8U2ltcGxlT3B0aW9uczxUPj4sXG4gICk6IFNpbXBsZU9wdGlvbnM8VD4ge1xuICAgIGNvbnN0IHBhdGhQYXJhbXMgPSBcInBhdGhcIiBpbiAob3B0cy5wYXJhbXMgPz8ge30pID8gb3B0cy5wYXJhbXM/LnBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZW52LlNpZ25lckFwaVJvb3QucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgIGNvbnN0IGJyb3dzZXJVc2VyQWdlbnQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gbmF2aWdhdG9yPy51c2VyQWdlbnQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhY2hlOiBcIm5vLXN0b3JlXCIsXG4gICAgICAvLyBJZiB3ZSBoYXZlIGFuIGFjdGl2ZVNlc3Npb24sIGxldCBpdCBkaWN0YXRlIHRoZSBiYXNlVXJsLiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIHRoZSBvbmUgc2V0IGF0IGNvbnN0cnVjdGlvblxuICAgICAgYmFzZVVybCxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBoZWFkZXJzOiBtZXJnZUhlYWRlcnMoXG4gICAgICAgIHtcbiAgICAgICAgICBcIlVzZXItQWdlbnRcIjogYnJvd3NlclVzZXJBZ2VudCA/PyBgJHtOQU1FfUAke1ZFUlNJT059YCxcbiAgICAgICAgICBcIlgtQ3ViaXN0LVRzLVNka1wiOiBgJHtOQU1FfUAke1ZFUlNJT059YCxcbiAgICAgICAgICBPcmlnaW46IHRoaXMuY29uZmlnLm9yaWdpbixcbiAgICAgICAgfSxcbiAgICAgICAgYXV0aEhlYWRlcih0b2tlbiksXG4gICAgICAgIHRoaXMuY29uZmlnLmhlYWRlcnMsXG4gICAgICAgIG9wdHMuaGVhZGVycyxcbiAgICAgICksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgLi4ub3B0cy5wYXJhbXMsXG4gICAgICAgIHBhdGg6IHtcbiAgICAgICAgICBvcmdfaWQ6IHRoaXMub3JnSWQsXG4gICAgICAgICAgLi4ucGF0aFBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFNpbXBsZU9wdGlvbnM8VD47XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgc3BlY2lmaWMgZXJyb3IgZXZlbnRzIHdoZW4gYSByZXF1ZXN0IGZhaWxlZFxuICAgKlxuICAgKiBAcGFyYW0gZXJyIFRoZSBlcnJvciB0byBjbGFzc2lmeVxuICAgKi9cbiAgYXN5bmMgI2NsYXNzaWZ5QW5kRW1pdEVycm9yKGVycjogRXJyb3JFdmVudCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgQUxMX0VWRU5UUy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcblxuICAgIGlmIChlcnIuaXNVc2VyTWZhRXJyb3IoKSkge1xuICAgICAgY29uc3QgZXYgPSBcInVzZXItbWZhLWZhaWxlZFwiO1xuICAgICAgdGhpcy5lbWl0KGV2LCBlcnIpO1xuICAgICAgQUxMX0VWRU5UUy5lbWl0KGV2LCBlcnIpO1xuICAgIH1cblxuICAgIC8vIGlmIHN0YXR1cyBpcyA0MDMgYW5kIGVycm9yIG1hdGNoZXMgb25lIG9mIHRoZSBcImludmFsaWQgc2Vzc2lvblwiIGVycm9yIGNvZGVzIHRyaWdnZXIgb25TZXNzaW9uRXhwaXJlZFxuICAgIC8vXG4gICAgLy8gVE9ETzogYmVjYXVzZSBlcnJvcnMgcmV0dXJuZWQgYnkgdGhlIGF1dGhvcml6ZXIgbGFtYmRhIGFyZSBub3QgZm9yd2FyZGVkIHRvIHRoZSBjbGllbnRcbiAgICAvLyAgICAgICB3ZSBhbHNvIHRyaWdnZXIgb25TZXNzaW9uRXhwaXJlZCB3aGVuIFwic2lnbmVyU2Vzc2lvblJlZnJlc2hcIiBmYWlsc1xuICAgIGlmIChcbiAgICAgIGVyci5zdGF0dXMgPT09IDQwMyAmJlxuICAgICAgKGVyci5pc1Nlc3Npb25FeHBpcmVkRXJyb3IoKSB8fCBlcnIub3BlcmF0aW9uID09IFwic2lnbmVyU2Vzc2lvblJlZnJlc2hcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IGV2ID0gXCJzZXNzaW9uLWV4cGlyZWRcIjtcbiAgICAgIHRoaXMuZW1pdChldiwgZXJyKTtcbiAgICAgIEFMTF9FVkVOVFMuZW1pdChldiwgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYW4gb3AgdXNpbmcgdGhlIHN0YXRlIG9mIHRoZSBjbGllbnQgKGF1dGggaGVhZGVycyAmIG9yZ19pZCkgd2l0aCByZXRyaWVzXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gb3AgVGhlIEFQSSBvcGVyYXRpb24geW91IHdpc2ggdG8gcGVyZm9ybVxuICAgKiBAcGFyYW0gb3B0cyBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvblxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCAoZXJyb3JzIHdpbGwgYmUgdGhyb3duKVxuICAgKi9cbiAgYXN5bmMgZXhlYzxUIGV4dGVuZHMgT3BlcmF0aW9uPihcbiAgICBvcDogT3A8VD4sXG4gICAgb3B0czogT21pdEF1dG9QYXJhbXM8U2ltcGxlT3B0aW9uczxUPj4sXG4gICk6IFByb21pc2U8RmV0Y2hSZXNwb25zZVN1Y2Nlc3NEYXRhPFQ+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuc2Vzc2lvbk1hbmFnZXIudG9rZW4oKTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCByZXRyeSgoKSA9PiBvcCh0aGlzLiNhcHBseU9wdGlvbnModG9rZW4sIG9wdHMpKSwge1xuICAgICAgICBwcmVkOiBhc3luYyAocmVzcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3AucmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzcC5lcnJvciBhcyBFcnJvclJlc3BvbnNlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yPy5yZXF1ZXN0X2lkO1xuXG4gICAgICAgICAgLy8gSWYgd2UgZ2V0IGEgXCJGb3JiaWRkZW5cIiBlcnJvciwgZXJhc2UgdGhlIGNhY2hlZCB0b2tlblxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETzogQ2hlY2sgZXJyb3IgY29kZXMgb25jZSBvdXIgQVBJIHJldHVybnMgZXJyb3IgY29kZXMgZm9yXG4gICAgICAgICAgLy8gYXV0aG9yaXphdGlvbiBmYWlsdXJlc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXR1cyA9PT0gNDAzICYmXG4gICAgICAgICAgICByZXF1ZXN0SWQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uTWFuYWdlci5vbkludmFsaWRUb2tlbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25NYW5hZ2VyLm9uSW52YWxpZFRva2VuKCk7XG4gICAgICAgICAgICBjb25zdCBvbGRUb2tlbiA9IHRva2VuO1xuICAgICAgICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLnNlc3Npb25NYW5hZ2VyLnRva2VuKCk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4gIT09IG9sZFRva2VuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFsc28gcmV0cnkgc2VydmVyLXNpZGUgZXJyb3JzXG4gICAgICAgICAgcmV0dXJuIHN0YXR1cyA+PSA1MDAgJiYgc3RhdHVzIDwgNjAwO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBPbmNlIHdlIGhhdmUgYSBub24tNVhYIHJlc3BvbnNlLCB3ZSB3aWxsIGFzc2VydE9rIChlaXRoZXIgdGhyb3dpbmcgb3IgeWllbGRpbmcgdGhlIHJlc3BvbnNlKVxuICAgICAgcmV0dXJuIGFzc2VydE9rKHJlc3ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyUmVzcG9uc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jY2xhc3NpZnlBbmRFbWl0RXJyb3IoZSk7IC8vIEVtaXQgYXBwcm9wcmlhdGUgZXZlbnRzXG4gICAgICB9XG4gICAgICB0aHJvdyBlOyAvLyBSZXRocm93IHRoZSBlcnJvclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVwZ3JhZGUgYSBzZXNzaW9uIHJlc3BvbnNlIGludG8gYSBmdWxsIFNlc3Npb25EYXRhIGJ5IGluY29ycG9yYXRpbmdcbiAqIGVsZW1lbnRzIG9mIGFuIGV4aXN0aW5nIFNlc3Npb25EYXRhXG4gKlxuICogQHBhcmFtIG1ldGEgQW4gZXhpc3RpbmcgU2Vzc2lvbkRhdGFcbiAqIEBwYXJhbSBpbmZvIEEgbmV3IHNlc3Npb24gY3JlYXRlZCB2aWEgdGhlIEFQSVxuICogQHBhcmFtIGN0eCBBZGRpdGlvbmFsIG1hbnVhbCBvdmVycmlkZXNcbiAqIEByZXR1cm5zIFNlc3Npb25EYXRhIHdpdGggbmV3IGluZm9ybWF0aW9uIGZyb20gaW5mbyBhbmQgY3R4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduZXJTZXNzaW9uRnJvbVNlc3Npb25JbmZvKFxuICBtZXRhOiBTZXNzaW9uTWV0YWRhdGEsXG4gIGluZm86IE5ld1Nlc3Npb25SZXNwb25zZSxcbiAgY3R4OiBQYXJ0aWFsPHsgcHVycG9zZTogc3RyaW5nOyByb2xlX2lkOiBzdHJpbmc7IG9yZ19pZDogc3RyaW5nIH0+LFxuKTogU2Vzc2lvbkRhdGEge1xuICByZXR1cm4ge1xuICAgIGVudjogbWV0YS5lbnYsXG4gICAgb3JnX2lkOiBtZXRhLm9yZ19pZCxcbiAgICBzZXNzaW9uX2V4cDogaW5mby5leHBpcmF0aW9uLFxuICAgIHNlc3Npb25faW5mbzogaW5mby5zZXNzaW9uX2luZm8sXG4gICAgdG9rZW46IGluZm8udG9rZW4sXG4gICAgcmVmcmVzaF90b2tlbjogaW5mby5yZWZyZXNoX3Rva2VuLFxuICAgIHB1cnBvc2U6IG1ldGEucHVycG9zZSxcbiAgICByb2xlX2lkOiBtZXRhLnJvbGVfaWQsXG4gICAgLi4uY3R4LFxuICB9O1xufVxuXG50eXBlIERlZXBPbWl0PEEsIEI+ID0gW0EsIEJdIGV4dGVuZHMgW29iamVjdCwgb2JqZWN0XVxuICA/IHtcbiAgICAgIFtLIGluIGtleW9mIEEgYXMgSyBleHRlbmRzIGtleW9mIEIgLy8gSWYgdGhlIGtleSBpcyBpbiBib3RoIEEgYW5kIEJcbiAgICAgICAgPyBBW0tdIGV4dGVuZHMgQltLXVxuICAgICAgICAgID8gSyAvL1xuICAgICAgICAgIDogbmV2ZXJcbiAgICAgICAgOiBuZXZlcl0/OiBLIGV4dGVuZHMga2V5b2YgQiA/IERlZXBPbWl0PEFbS10sIEJbS10+IDogbmV2ZXI7XG4gICAgfSAmIHtcbiAgICAgIFtLIGluIGtleW9mIEEgYXMgSyBleHRlbmRzIGtleW9mIEIgPyAoQltLXSBleHRlbmRzIEFbS10gPyBuZXZlciA6IEspIDogS106IEsgZXh0ZW5kcyBrZXlvZiBCXG4gICAgICAgID8gRGVlcE9taXQ8QVtLXSwgQltLXT5cbiAgICAgICAgOiBBW0tdO1xuICAgIH1cbiAgOiBBO1xuXG5leHBvcnQgdHlwZSBPbWl0QXV0b1BhcmFtczxPPiA9IERlZXBPbWl0PFxuICBPLFxuICB7XG4gICAgYmFzZVVybDogc3RyaW5nO1xuICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogc3RyaW5nIH0gfTtcbiAgfVxuPiAmIHsgcGFyYW1zPzogeyBwYXRoPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB9O1xuXG4vKipcbiAqIENyZWF0ZXMge0BsaW5rIEhlYWRlcnNJbml0fSBjb250YWluaW5nIGEgc2luZ2xlIFwiQXV0aG9yaXphdGlvblwiIGhlYWRlciB3aXRoIGEgZ2l2ZW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIHRva2VuIFRoZSBcIkF1dGhvcml6YXRpb25cIiBoZWFkZXIgdmFsdWVcbiAqIEByZXR1cm5zIEEge0BsaW5rIEhlYWRlcnNJbml0fSBvYmplY3QgY29udGFpbmluZyBhIHNpbmdsZSBcIkF1dGhvcml6YXRpb25cIiBoZWFkZXIgd2l0aCBhIGdpdmVuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0aEhlYWRlcih0b2tlbjogc3RyaW5nKTogSGVhZGVyc0luaXQge1xuICByZXR1cm4geyBBdXRob3JpemF0aW9uOiB0b2tlbiB9O1xufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EnvInterface, Region, StackName } from "../env";
|
|
2
|
-
import type { ClientSessionInfo } from "../schema_types";
|
|
1
|
+
import type { EnvInterface, Region, StackName } from "../env.ts";
|
|
2
|
+
import type { ClientSessionInfo } from "../schema_types.ts";
|
|
3
3
|
export interface SessionLifetime {
|
|
4
4
|
/** Session lifetime (in seconds). Defaults to one week (604800). */
|
|
5
5
|
session?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/client/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/client/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
2
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -11,16 +10,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
11
|
};
|
|
13
12
|
var _NoRefreshSessionManager_metadata, _NoRefreshSessionManager_token, _ExclusiveSessionManager_refreshing, _MemorySessionManager_data;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.parseSessionLike = parseSessionLike;
|
|
17
|
-
exports.refresh = refresh;
|
|
18
|
-
exports.metadata = metadata;
|
|
19
|
-
exports.parseBase64SessionData = parseBase64SessionData;
|
|
20
|
-
exports.serializeRefreshToken = serializeRefreshToken;
|
|
21
|
-
exports.serializeBase64SessionData = serializeBase64SessionData;
|
|
22
|
-
const fetch_1 = require("../fetch");
|
|
23
|
-
const retry_1 = require("../retry");
|
|
13
|
+
import { apiFetch, assertOk } from "../fetch.js";
|
|
14
|
+
import { retryOn5XX } from "../retry.js";
|
|
24
15
|
/** Prefix used for CubeSigner OAuth tokens */
|
|
25
16
|
const CUBESIGNER_PREFIX = "3d6fd7397:";
|
|
26
17
|
/**
|
|
@@ -30,7 +21,7 @@ const CUBESIGNER_PREFIX = "3d6fd7397:";
|
|
|
30
21
|
* @param session The session object or encoding
|
|
31
22
|
* @returns The session object
|
|
32
23
|
*/
|
|
33
|
-
function parseSessionLike(session) {
|
|
24
|
+
export function parseSessionLike(session) {
|
|
34
25
|
return typeof session === "string" ? parseBase64SessionData(session) : session;
|
|
35
26
|
}
|
|
36
27
|
/**
|
|
@@ -43,7 +34,7 @@ function parseSessionLike(session) {
|
|
|
43
34
|
* const client = await CubeSignerClient.create(manager);
|
|
44
35
|
* ```
|
|
45
36
|
*/
|
|
46
|
-
class NoRefreshSessionManager {
|
|
37
|
+
export class NoRefreshSessionManager {
|
|
47
38
|
/**
|
|
48
39
|
* Constructs the manager with the session data
|
|
49
40
|
*
|
|
@@ -65,7 +56,6 @@ class NoRefreshSessionManager {
|
|
|
65
56
|
return __classPrivateFieldGet(this, _NoRefreshSessionManager_token, "f");
|
|
66
57
|
}
|
|
67
58
|
}
|
|
68
|
-
exports.NoRefreshSessionManager = NoRefreshSessionManager;
|
|
69
59
|
_NoRefreshSessionManager_metadata = new WeakMap(), _NoRefreshSessionManager_token = new WeakMap();
|
|
70
60
|
/**
|
|
71
61
|
* A template for session managers which have exclusive access to a session
|
|
@@ -74,7 +64,7 @@ _NoRefreshSessionManager_metadata = new WeakMap(), _NoRefreshSessionManager_toke
|
|
|
74
64
|
* It is NOT suitable for applications where multiple clients are using the same
|
|
75
65
|
* session as they will both attempt to refresh independently.
|
|
76
66
|
*/
|
|
77
|
-
class ExclusiveSessionManager {
|
|
67
|
+
export class ExclusiveSessionManager {
|
|
78
68
|
constructor() {
|
|
79
69
|
/** If present, the session is currently refreshing. Await to get the freshest SessionData */
|
|
80
70
|
_ExclusiveSessionManager_refreshing.set(this, void 0);
|
|
@@ -118,10 +108,9 @@ class ExclusiveSessionManager {
|
|
|
118
108
|
return await __classPrivateFieldGet(this, _ExclusiveSessionManager_refreshing, "f");
|
|
119
109
|
}
|
|
120
110
|
}
|
|
121
|
-
exports.ExclusiveSessionManager = ExclusiveSessionManager;
|
|
122
111
|
_ExclusiveSessionManager_refreshing = new WeakMap();
|
|
123
112
|
/** Implements a SessionManager without persistence */
|
|
124
|
-
class MemorySessionManager extends ExclusiveSessionManager {
|
|
113
|
+
export class MemorySessionManager extends ExclusiveSessionManager {
|
|
125
114
|
/**
|
|
126
115
|
* Construct with data in memory
|
|
127
116
|
*
|
|
@@ -146,18 +135,16 @@ class MemorySessionManager extends ExclusiveSessionManager {
|
|
|
146
135
|
__classPrivateFieldSet(this, _MemorySessionManager_data, data, "f");
|
|
147
136
|
}
|
|
148
137
|
}
|
|
149
|
-
exports.MemorySessionManager = MemorySessionManager;
|
|
150
138
|
_MemorySessionManager_data = new WeakMap();
|
|
151
139
|
/** An error type to be thrown by SessionManager's when the session is unavailable */
|
|
152
|
-
class NoSessionFoundError extends Error {
|
|
140
|
+
export class NoSessionFoundError extends Error {
|
|
153
141
|
/** Constructs the error with the appropriate message */
|
|
154
142
|
constructor() {
|
|
155
143
|
super("No session available for the client");
|
|
156
144
|
}
|
|
157
145
|
}
|
|
158
|
-
exports.NoSessionFoundError = NoSessionFoundError;
|
|
159
146
|
/** The number of seconds before expiration time, to attempt a refresh */
|
|
160
|
-
|
|
147
|
+
export const DEFAULT_EXPIRATION_BUFFER_SECS = 30;
|
|
161
148
|
/**
|
|
162
149
|
* A utility function that refreshes a session using the CubeSigner API if it is close
|
|
163
150
|
* to expiring.
|
|
@@ -166,7 +153,7 @@ exports.DEFAULT_EXPIRATION_BUFFER_SECS = 30;
|
|
|
166
153
|
* @returns Immediately returns undefined if the session does not require a refresh, else return a refreshed session
|
|
167
154
|
*/
|
|
168
155
|
function refreshIfNecessary(session) {
|
|
169
|
-
if (!
|
|
156
|
+
if (!isStale(session))
|
|
170
157
|
return;
|
|
171
158
|
return refresh(session);
|
|
172
159
|
}
|
|
@@ -176,9 +163,9 @@ function refreshIfNecessary(session) {
|
|
|
176
163
|
* @param session The CubeSigner session to refresh
|
|
177
164
|
* @returns A refreshed session
|
|
178
165
|
*/
|
|
179
|
-
function refresh(session) {
|
|
166
|
+
export function refresh(session) {
|
|
180
167
|
const { epoch: epoch_num, epoch_token, refresh_token: other_token } = session.session_info;
|
|
181
|
-
return
|
|
168
|
+
return retryOn5XX(() => apiFetch("/v1/org/{org_id}/token/refresh", "patch", {
|
|
182
169
|
baseUrl: session.env["Dev-CubeSignerStack"].SignerApiRoot.replace(/\/$/, ""),
|
|
183
170
|
params: {
|
|
184
171
|
path: {
|
|
@@ -190,7 +177,7 @@ function refresh(session) {
|
|
|
190
177
|
},
|
|
191
178
|
body: { epoch_num, epoch_token, other_token },
|
|
192
179
|
}))
|
|
193
|
-
.then(
|
|
180
|
+
.then(assertOk)
|
|
194
181
|
.then((res) => ({
|
|
195
182
|
...session,
|
|
196
183
|
...res,
|
|
@@ -203,7 +190,7 @@ function refresh(session) {
|
|
|
203
190
|
* @param session The session
|
|
204
191
|
* @returns The session metadata
|
|
205
192
|
*/
|
|
206
|
-
function metadata(session) {
|
|
193
|
+
export function metadata(session) {
|
|
207
194
|
const { env, other_envs, org_id, role_id, purpose, session_exp } = session;
|
|
208
195
|
const merged = { ...env };
|
|
209
196
|
Object.entries(other_envs ?? {}).forEach(([region, env]) => {
|
|
@@ -223,12 +210,10 @@ function metadata(session) {
|
|
|
223
210
|
* @param timeInSeconds an epoch timestamp
|
|
224
211
|
* @returns whether or not the timestamp is before now + DEFAULT_EXPIRATION_BUFFER_SECS
|
|
225
212
|
*/
|
|
226
|
-
const isWithinBuffer = (timeInSeconds) => timeInSeconds < Date.now() / 1000 +
|
|
227
|
-
const isStale = (session) => isWithinBuffer(session.session_info.auth_token_exp);
|
|
228
|
-
|
|
229
|
-
const isRefreshable = (session) => !isWithinBuffer(session.session_exp ?? Number.POSITIVE_INFINITY) &&
|
|
213
|
+
const isWithinBuffer = (timeInSeconds) => timeInSeconds < Date.now() / 1000 + DEFAULT_EXPIRATION_BUFFER_SECS;
|
|
214
|
+
export const isStale = (session) => isWithinBuffer(session.session_info.auth_token_exp);
|
|
215
|
+
export const isRefreshable = (session) => !isWithinBuffer(session.session_exp ?? Number.POSITIVE_INFINITY) &&
|
|
230
216
|
!isWithinBuffer(session.session_info.refresh_token_exp);
|
|
231
|
-
exports.isRefreshable = isRefreshable;
|
|
232
217
|
/**
|
|
233
218
|
* Parses the base64 API session token.
|
|
234
219
|
* Consumes the output of the cli command:
|
|
@@ -241,7 +226,7 @@ exports.isRefreshable = isRefreshable;
|
|
|
241
226
|
*
|
|
242
227
|
* @returns session.
|
|
243
228
|
*/
|
|
244
|
-
function parseBase64SessionData(sessionDataString) {
|
|
229
|
+
export function parseBase64SessionData(sessionDataString) {
|
|
245
230
|
// parse token, stripping whitespace.
|
|
246
231
|
const secretB64Token = sessionDataString.replace(/\s/g, "");
|
|
247
232
|
const data = JSON.parse(atob(secretB64Token));
|
|
@@ -285,7 +270,7 @@ function parseBase64SessionData(sessionDataString) {
|
|
|
285
270
|
* @param info Session information
|
|
286
271
|
* @returns A refresh token
|
|
287
272
|
*/
|
|
288
|
-
function serializeRefreshToken(info) {
|
|
273
|
+
export function serializeRefreshToken(info) {
|
|
289
274
|
const sessionIdSer = btoa(info.session_id);
|
|
290
275
|
const authData = btoa(JSON.stringify({
|
|
291
276
|
epoch_num: info.epoch,
|
|
@@ -300,7 +285,7 @@ function serializeRefreshToken(info) {
|
|
|
300
285
|
* @param session The session data to serialize
|
|
301
286
|
* @returns The serialized data
|
|
302
287
|
*/
|
|
303
|
-
function serializeBase64SessionData(session) {
|
|
288
|
+
export function serializeBase64SessionData(session) {
|
|
304
289
|
return btoa(JSON.stringify(session));
|
|
305
290
|
}
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUF3REEsNENBRUM7QUF3TUQsMEJBc0JDO0FBUUQsNEJBZUM7QUE0QkQsd0RBd0NDO0FBUUQsc0RBVUM7QUFRRCxnRUFFQztBQTlZRCxvQ0FBOEM7QUFDOUMsb0NBQXNDO0FBR3RDLDhDQUE4QztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztBQTJDdkM7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBb0I7SUFDbkQsT0FBTyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDakYsQ0FBQztBQXFDRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHVCQUF1QjtJQUlsQzs7OztPQUlHO0lBQ0gsWUFBWSxPQUFvQjtRQVJoQyxvREFBMkI7UUFDM0IsaURBQWU7UUFRYixPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsdUJBQUEsSUFBSSxxQ0FBYSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQUEsQ0FBQztRQUNuQyx1QkFBQSxJQUFJLGtDQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQUEsQ0FBQztJQUM5QixDQUFDO0lBRUQscURBQXFEO0lBQ3JELEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyx1QkFBQSxJQUFJLHlDQUFVLENBQUM7SUFDeEIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxLQUFLLENBQUMsS0FBSztRQUNULE9BQU8sdUJBQUEsSUFBSSxzQ0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQXhCRCwwREF3QkM7O0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBc0IsdUJBQXVCO0lBQTdDO1FBQ0UsNkZBQTZGO1FBQzdGLHNEQUFtQztJQXlEckMsQ0FBQztJQTNDQzs7T0FFRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVuQyw0SUFBcUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQzNDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RELEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsdUJBQUEsSUFBSSx1Q0FBZSxTQUFTLE1BQUEsQ0FBQyxDQUFDLE1BQUEsQ0FBQztRQUVsRCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLEVBQUU7UUFDRixtRkFBbUY7UUFDbkYsZ0NBQWdDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksMkNBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSx1QkFBQSxJQUFJLDJDQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsZ0RBQWdEO1FBQ2hELDRJQUFxQixJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsdUJBQUEsSUFBSSx1Q0FBZSxTQUFTLE1BQUEsQ0FBQyxDQUFDLE1BQUEsQ0FBQztRQUVqRCxzRUFBc0U7UUFDdEUseUNBQXlDO1FBQ3pDLE9BQU8sTUFBTSx1QkFBQSxJQUFJLDJDQUFZLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBM0RELDBEQTJEQzs7QUFFRCxzREFBc0Q7QUFDdEQsTUFBYSxvQkFBcUIsU0FBUSx1QkFBdUI7SUFJL0Q7Ozs7T0FJRztJQUNILFlBQVksSUFBaUI7UUFDM0IsS0FBSyxFQUFFLENBQUM7UUFUViwyREFBMkQ7UUFDM0QsNkNBQW1CO1FBU2pCLHVCQUFBLElBQUksOEJBQVMsSUFBSSxNQUFBLENBQUM7SUFDcEIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxLQUFLLENBQUMsUUFBUTtRQUNaLE9BQU8sdUJBQUEsSUFBSSxrQ0FBTSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFpQjtRQUMzQix1QkFBQSxJQUFJLDhCQUFTLElBQUksTUFBQSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQTNCRCxvREEyQkM7O0FBRUQscUZBQXFGO0FBQ3JGLE1BQWEsbUJBQW9CLFNBQVEsS0FBSztJQUM1Qyx3REFBd0Q7SUFDeEQ7UUFDRSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFMRCxrREFLQztBQUVELHlFQUF5RTtBQUM1RCxRQUFBLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUVqRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE9BQW9CO0lBQzlDLElBQUksQ0FBQyxJQUFBLGVBQU8sRUFBQyxPQUFPLENBQUM7UUFBRSxPQUFPO0lBQzlCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxPQUFvQjtJQUMxQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7SUFDM0YsT0FBTyxJQUFBLGtCQUFVLEVBQUMsR0FBRyxFQUFFLENBQ3JCLElBQUEsZ0JBQVEsRUFBQyxnQ0FBZ0MsRUFBRSxPQUFPLEVBQUU7UUFDbEQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDNUUsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTthQUN2QjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQzdCO1FBQ0QsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUU7S0FDOUMsQ0FBQyxDQUNIO1NBQ0UsSUFBSSxDQUFDLGdCQUFRLENBQUM7U0FDZCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZCxHQUFHLE9BQU87UUFDVixHQUFHLEdBQUc7UUFDTixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixRQUFRLENBQUMsT0FBb0I7SUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQ3pELE1BQU0sQ0FBQyx1QkFBdUIsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPO1FBQ0wsR0FBRyxFQUFFLE1BQU07UUFDWCxNQUFNO1FBQ04sT0FBTztRQUNQLE9BQU87UUFDUCxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVO1FBQzNDLFdBQVc7UUFDWCxLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDL0MsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsc0NBQThCLENBQUM7QUFFOUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FDdkQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFEekMsUUFBQSxPQUFPLFdBQ2tDO0FBRS9DLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBb0IsRUFBVyxFQUFFLENBQzdELENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUY3QyxRQUFBLGFBQWEsaUJBRWdDO0FBRTFEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsaUJBQXlCO0lBQzlELHFDQUFxQztJQUNyQyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFOUMsOEVBQThFO0lBQzlFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyx3QkFBd0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUsscUNBQXFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUsseUJBQXlCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBc0IsQ0FBQztJQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsT0FBTyxJQUFtQixDQUFDO0FBQzdCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQXVCO0lBQzNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztRQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVU7S0FDN0IsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPLEdBQUcsaUJBQWlCLEdBQUcsWUFBWSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQUMsT0FBb0I7SUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudkludGVyZmFjZSwgUmVnaW9uLCBTdGFja05hbWUgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBhcGlGZXRjaCwgYXNzZXJ0T2sgfSBmcm9tIFwiLi4vZmV0Y2hcIjtcbmltcG9ydCB7IHJldHJ5T241WFggfSBmcm9tIFwiLi4vcmV0cnlcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50U2Vzc2lvbkluZm8gfSBmcm9tIFwiLi4vc2NoZW1hX3R5cGVzXCI7XG5cbi8qKiBQcmVmaXggdXNlZCBmb3IgQ3ViZVNpZ25lciBPQXV0aCB0b2tlbnMgKi9cbmNvbnN0IENVQkVTSUdORVJfUFJFRklYID0gXCIzZDZmZDczOTc6XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkxpZmV0aW1lIHtcbiAgLyoqIFNlc3Npb24gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBvbmUgd2VlayAoNjA0ODAwKS4gKi9cbiAgc2Vzc2lvbj86IG51bWJlcjtcbiAgLyoqIEF1dGggdG9rZW4gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBmaXZlIG1pbnV0ZXMgKDMwMCkuICovXG4gIGF1dGg/OiBudW1iZXI7XG4gIC8qKiBSZWZyZXNoIHRva2VuIGxpZmV0aW1lIChpbiBzZWNvbmRzKS4gRGVmYXVsdHMgdG8gb25lIGRheSAoODY0MDApLiAqL1xuICByZWZyZXNoPzogbnVtYmVyO1xuICAvKiogR3JhY2UgbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byAzMCBzZWNvbmRzICgzMCkuICovXG4gIGdyYWNlPzogbnVtYmVyO1xufVxuXG4vKiogSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3ViZVNpZ25lciBzZXNzaW9uIGZpbGUgZm9ybWF0ICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgLyoqIFRoZSBvcmdhbml6YXRpb24gSUQgKi9cbiAgb3JnX2lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm9sZSBJRCAqL1xuICByb2xlX2lkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBwdXJwb3NlIG9mIHRoZSBzZXNzaW9uIHRva2VuICovXG4gIHB1cnBvc2U/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIHRva2VuIHRvIGluY2x1ZGUgaW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSB0b2tlbiB0byB1c2UgdG8gcmVmcmVzaCB0aGUgc2Vzc2lvbiAqL1xuICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIGluZm8gKi9cbiAgc2Vzc2lvbl9pbmZvOiBDbGllbnRTZXNzaW9uSW5mbztcbiAgLyoqIFNlc3Npb24gZXhwaXJhdGlvbiAoaW4gc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoKSBiZXlvbmQgd2hpY2ggaXQgY2Fubm90IGJlIHJlZnJlc2hlZCAqL1xuICBzZXNzaW9uX2V4cDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsgLy8gbWF5IGJlIG1pc3NpbmcgaW4gbGVnYWN5IHNlc3Npb24gZmlsZXNcbiAgLyoqIEF2YWlsYWJsZSByZWdpb25hbCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzICovXG4gIGVudjogUmVjb3JkPFN0YWNrTmFtZSwgRW52SW50ZXJmYWNlPjtcbiAgLyoqIE90aGVyIHJlZ2lvbmFsIGVudmlyb25tZW50cyAobm90IGluY2x1ZGVkIGluICdlbnYnKSwgbWFwcGVkIGJ5IHJlZ2lvbi4gKi9cbiAgLy8gTk9URTogdGhpcyBpcyB0aGUgZm9ybWF0IHRoZSBDTEkgcHJvZHVjZXNcbiAgb3RoZXJfZW52cz86IFJlY29yZDxSZWdpb24sIEVudkludGVyZmFjZT47XG59XG5cbi8vIFJhdGhlciB0aGFuIGp1c3QgZG9pbmcgYSBzaW1wbGUgUGljaywgd2UgZ28gdGhlIGV4dHJhIG1pbGUgdG8gZW5zdXJlIHRoYXRcbi8vIGFueSBtZXRhZGF0YSBvYmplY3QgTVVTVCBORVZFUiBpbmNsdWRlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvblxudHlwZSBTYWZlU2Vzc2lvbkRhdGFGaWVsZHMgPSBcImVudlwiIHwgXCJvcmdfaWRcIiB8IFwicm9sZV9pZFwiIHwgXCJwdXJwb3NlXCIgfCBcInNlc3Npb25fZXhwXCI7XG5cbi8qKiBSZXByZXNlbnRzIGVpdGhlciB0aGUgU2Vzc2lvbkRhdGEgb3IgYSBiYXNlNjQgSlNPTiBlbmNvZGluZyBvZiBpdCAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbkxpa2UgPSBzdHJpbmcgfCBTZXNzaW9uRGF0YTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGJhc2U2NCBlbmNvZGVkIFNlc3Npb25EYXRhLCBpZiBuZWNlc3NhcnkuXG4gKiBUaGlzIGFsbG93cyBTZXNzaW9uTWFuYWdlcnMgdG8gZWFzaWx5IGluZ2VzdCB0aGUgbXVsdGlwbGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIHNlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIFRoZSBzZXNzaW9uIG9iamVjdCBvciBlbmNvZGluZ1xuICogQHJldHVybnMgVGhlIHNlc3Npb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlc3Npb25MaWtlKHNlc3Npb246IFNlc3Npb25MaWtlKSB7XG4gIHJldHVybiB0eXBlb2Ygc2Vzc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQmFzZTY0U2Vzc2lvbkRhdGEoc2Vzc2lvbikgOiBzZXNzaW9uO1xufVxuXG4vKiogTm9uLXNlbnNpdGl2ZSBpbmZvIGFib3V0IGEgc2Vzc2lvbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk1ldGFkYXRhID0gUGljazxTZXNzaW9uRGF0YSwgU2FmZVNlc3Npb25EYXRhRmllbGRzPiAmIHtcbiAgW0sgaW4gRXhjbHVkZTxrZXlvZiBTZXNzaW9uRGF0YSwgU2FmZVNlc3Npb25EYXRhRmllbGRzPl0/OiBuZXZlcjtcbn0gJiB7IHNlc3Npb25faWQ6IHN0cmluZzsgZXBvY2g6IG51bWJlciB9O1xuXG4vKipcbiAqIEEgU2Vzc2lvbk1hbmFnZXIncyBqb2IgaXMgdG8gaGFuZGxlIHNlc3Npb24gcGVyc2lzdGVuY2UgYW5kIHJlZnJlc2hlc1xuICpcbiAqIFRoZSBpbnRlcmZhY2UgZG9lcyBub3QgaW1wb3NlICp3aGVuKiBhIHJlZnJlc2ggbXVzdCBvY2N1ciwgdGhvdWdoIHR5cGljYWxseVxuICogdGhpcyB3aWxsIGJlIG9uIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk1hbmFnZXIge1xuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGlmIGEgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGFuIGludmFsaWQgdG9rZW4uXG4gICAqL1xuICBvbkludmFsaWRUb2tlbj86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIG1ldGFkYXRhIGZvciB0aGUgc2Vzc2lvbi4gU2hvdWxkIHRocm93IGlmIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHJldHVybnMgSW5mbyBhYm91dCB0aGUgc2Vzc2lvblxuICAgKlxuICAgKiBAdGhyb3dzIHtOb1Nlc3Npb25Gb3VuZEVycm9yfSBJZiB0aGUgc2Vzc2lvbiBpcyBub3QgYXZhaWxhYmxlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBQcm9taXNlPFNlc3Npb25NZXRhZGF0YT47XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIHRva2VuIHRvIGJlIHVzZWQgZm9yIGEgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGNsaWVudFxuICAgKiB0byBwcm92aWRlIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdG9rZW5cbiAgICovXG4gIHRva2VuKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIGNvbnN0cnVjdGlvbiBvZiBjbGllbnRzIHdoaWNoIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlZnJlc2hcbiAqIHNlc3Npb25zLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWFuYWdlciA9IG5ldyBOb1JlZnJlc2hTZXNzaW9uTWFuYWdlcihzZXNzaW9uRGF0YSk7XG4gKiBjb25zdCBjbGllbnQgPSBhd2FpdCBDdWJlU2lnbmVyQ2xpZW50LmNyZWF0ZShtYW5hZ2VyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTm9SZWZyZXNoU2Vzc2lvbk1hbmFnZXIgaW1wbGVtZW50cyBTZXNzaW9uTWFuYWdlciB7XG4gICNtZXRhZGF0YTogU2Vzc2lvbk1ldGFkYXRhO1xuICAjdG9rZW46IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgbWFuYWdlciB3aXRoIHRoZSBzZXNzaW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZm9yIHRoaXMgbWFuYWdlciB0byB1c2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IFNlc3Npb25MaWtlKSB7XG4gICAgc2Vzc2lvbiA9IHBhcnNlU2Vzc2lvbkxpa2Uoc2Vzc2lvbik7XG4gICAgdGhpcy4jbWV0YWRhdGEgPSBtZXRhZGF0YShzZXNzaW9uKTtcbiAgICB0aGlzLiN0b2tlbiA9IHNlc3Npb24udG9rZW47XG4gIH1cblxuICAvKiogQHJldHVybnMgTm9uLXNlbnNpdGl2ZSBtZXRhZGF0YSBvbiB0aGUgc2Vzc2lvbiAqL1xuICBhc3luYyBtZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy4jbWV0YWRhdGE7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHRva2VuIHRvIHVzZSBmb3IgcmVxdWVzdHMgKi9cbiAgYXN5bmMgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Rva2VuO1xuICB9XG59XG5cbi8qKlxuICogQSB0ZW1wbGF0ZSBmb3Igc2Vzc2lvbiBtYW5hZ2VycyB3aGljaCBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYSBzZXNzaW9uXG4gKiBhbmQgY2FuIHN0b3JlL2xvYWQgdGhlbSBmcmVlbHkuXG4gKlxuICogSXQgaXMgTk9UIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgbXVsdGlwbGUgY2xpZW50cyBhcmUgdXNpbmcgdGhlIHNhbWVcbiAqIHNlc3Npb24gYXMgdGhleSB3aWxsIGJvdGggYXR0ZW1wdCB0byByZWZyZXNoIGluZGVwZW5kZW50bHkuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFeGNsdXNpdmVTZXNzaW9uTWFuYWdlciBpbXBsZW1lbnRzIFNlc3Npb25NYW5hZ2VyIHtcbiAgLyoqIElmIHByZXNlbnQsIHRoZSBzZXNzaW9uIGlzIGN1cnJlbnRseSByZWZyZXNoaW5nLiBBd2FpdCB0byBnZXQgdGhlIGZyZXNoZXN0IFNlc3Npb25EYXRhICovXG4gICNyZWZyZXNoaW5nPzogUHJvbWlzZTxTZXNzaW9uRGF0YT47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBTZXNzaW9uRGF0YSBmcm9tIHN0b3JhZ2VcbiAgICovXG4gIGFic3RyYWN0IHJldHJpZXZlKCk6IFByb21pc2U8U2Vzc2lvbkRhdGE+O1xuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgU2Vzc2lvbkRhdGEgaW50byBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlXG4gICAqL1xuICBhYnN0cmFjdCBzdG9yZShkYXRhOiBTZXNzaW9uRGF0YSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBzZXNzaW9uIG1ldGFkYXRhLCBsb2FkZWQgZnJvbSBzdG9yYWdlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBQcm9taXNlPFNlc3Npb25NZXRhZGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJldHJpZXZlKCkudGhlbihtZXRhZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHRva2VuIGxvYWRlZCBmcm9tIHN0b3JhZ2UsIHJlZnJlc2hpbmcgaWYgbmVjZXNzYXJ5XG4gICAqL1xuICBhc3luYyB0b2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJldHJpZXZlKCk7XG5cbiAgICB0aGlzLiNyZWZyZXNoaW5nID8/PSByZWZyZXNoSWZOZWNlc3NhcnkoZGF0YSlcbiAgICAgID8udGhlbihhc3luYyAoZGF0YSkgPT4gKGF3YWl0IHRoaXMuc3RvcmUoZGF0YSksIGRhdGEpKVxuICAgICAgPy5maW5hbGx5KCgpID0+ICh0aGlzLiNyZWZyZXNoaW5nID0gdW5kZWZpbmVkKSk7XG5cbiAgICAvLyBUZWNobmljYWxseSwgaW4gbWFueSBjYXNlcyB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWl0IGZvciB0aGUgcmVmcmVzaCxcbiAgICAvLyB0aGUgc2Vzc2lvbiB3aWxsIHN0aWxsIGJlIHZhbGlkIGZvciBhIHdoaWxlIGFmdGVyIHRoZSByZWZyZXNoIHN0YXJ0cy5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgYXV0aCB0b2tlbiB3aWxsIGJlIGVudGlyZWx5IGV4cGlyZWQsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5XG4gICAgLy8gd2FpdCBmb3IgYSBzdWNjZXNzZnVsIHJlZnJlc2hcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy4jcmVmcmVzaGluZyA/IGF3YWl0IHRoaXMuI3JlZnJlc2hpbmcgOiBkYXRhO1xuICAgIHJldHVybiBzZXNzaW9uLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGZvcmNlIGEgdG9rZW4gcmVmcmVzaFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgcmVmcmVzaGVkIHNlc3Npb24gZGF0YVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFzeW5jIGZvcmNlUmVmcmVzaCgpOiBQcm9taXNlPFNlc3Npb25EYXRhPiB7XG4gICAgLy8gSWYgbm90IGN1cnJlbnRseSByZWZyZXNoaW5nLCBzdGFydCByZWZyZXNoaW5nXG4gICAgdGhpcy4jcmVmcmVzaGluZyA/Pz0gdGhpcy5yZXRyaWV2ZSgpXG4gICAgICAudGhlbihyZWZyZXNoKVxuICAgICAgLnRoZW4oYXN5bmMgKGRhdGEpID0+IChhd2FpdCB0aGlzLnN0b3JlKGRhdGEpLCBkYXRhKSlcbiAgICAgIC5maW5hbGx5KCgpID0+ICh0aGlzLiNyZWZyZXNoaW5nID0gdW5kZWZpbmVkKSk7XG5cbiAgICAvLyBCZWNhdXNlIHdlID8/PSBhc3NpZ25lZCB0byByZWZyZXNoaW5nIGFib3ZlLCB3ZSdyZSBndWFyYW50ZWVkIHRvIGJlXG4gICAgLy8gYWN0aXZlbHkgcmVmcmVzaGluZywgc28ganVzdCBhd2FpdCBpdC5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jcmVmcmVzaGluZztcbiAgfVxufVxuXG4vKiogSW1wbGVtZW50cyBhIFNlc3Npb25NYW5hZ2VyIHdpdGhvdXQgcGVyc2lzdGVuY2UgKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlTZXNzaW9uTWFuYWdlciBleHRlbmRzIEV4Y2x1c2l2ZVNlc3Npb25NYW5hZ2VyIHtcbiAgLyoqIFRoZSBzZXNzaW9uIGRhdGEgY29udGFpbmluZyBib3RoIG1ldGFkYXRhIGFuZCB0b2tlbnMgKi9cbiAgI2RhdGE6IFNlc3Npb25EYXRhO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgd2l0aCBkYXRhIGluIG1lbW9yeVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgaW5pdGlhbCBzZXNzaW9uIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFNlc3Npb25EYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNkYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB0aGUgaW4tbWVtb3J5IGRhdGEgKi9cbiAgYXN5bmMgcmV0cmlldmUoKTogUHJvbWlzZTxTZXNzaW9uRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLiNkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBpbi1tZW1vcnkgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc2Vzc2lvbiBkYXRhIHRvIHN0b3JlXG4gICAqL1xuICBhc3luYyBzdG9yZShkYXRhOiBTZXNzaW9uRGF0YSkge1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8qKiBBbiBlcnJvciB0eXBlIHRvIGJlIHRocm93biBieSBTZXNzaW9uTWFuYWdlcidzIHdoZW4gdGhlIHNlc3Npb24gaXMgdW5hdmFpbGFibGUgKi9cbmV4cG9ydCBjbGFzcyBOb1Nlc3Npb25Gb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogQ29uc3RydWN0cyB0aGUgZXJyb3Igd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIk5vIHNlc3Npb24gYXZhaWxhYmxlIGZvciB0aGUgY2xpZW50XCIpO1xuICB9XG59XG5cbi8qKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGV4cGlyYXRpb24gdGltZSwgdG8gYXR0ZW1wdCBhIHJlZnJlc2ggKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUElSQVRJT05fQlVGRkVSX1NFQ1MgPSAzMDtcblxuLyoqXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCByZWZyZXNoZXMgYSBzZXNzaW9uIHVzaW5nIHRoZSBDdWJlU2lnbmVyIEFQSSBpZiBpdCBpcyBjbG9zZVxuICogdG8gZXhwaXJpbmcuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZGF0YSB3aGljaCBtYXkgcmVxdWlyZSBhIHJlZnJlc2hcbiAqIEByZXR1cm5zIEltbWVkaWF0ZWx5IHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBzZXNzaW9uIGRvZXMgbm90IHJlcXVpcmUgYSByZWZyZXNoLCBlbHNlIHJldHVybiBhIHJlZnJlc2hlZCBzZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJlZnJlc2hJZk5lY2Vzc2FyeShzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IHVuZGVmaW5lZCB8IFByb21pc2U8U2Vzc2lvbkRhdGE+IHtcbiAgaWYgKCFpc1N0YWxlKHNlc3Npb24pKSByZXR1cm47XG4gIHJldHVybiByZWZyZXNoKHNlc3Npb24pO1xufVxuXG4vKipcbiAqIEludm9rZXMgdGhlIEN1YmVTaWduZXIgQVBJIHRvIHJlZnJlc2ggYSBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIEN1YmVTaWduZXIgc2Vzc2lvbiB0byByZWZyZXNoXG4gKiBAcmV0dXJucyBBIHJlZnJlc2hlZCBzZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoKHNlc3Npb246IFNlc3Npb25EYXRhKTogUHJvbWlzZTxTZXNzaW9uRGF0YT4ge1xuICBjb25zdCB7IGVwb2NoOiBlcG9jaF9udW0sIGVwb2NoX3Rva2VuLCByZWZyZXNoX3Rva2VuOiBvdGhlcl90b2tlbiB9ID0gc2Vzc2lvbi5zZXNzaW9uX2luZm87XG4gIHJldHVybiByZXRyeU9uNVhYKCgpID0+XG4gICAgYXBpRmV0Y2goXCIvdjEvb3JnL3tvcmdfaWR9L3Rva2VuL3JlZnJlc2hcIiwgXCJwYXRjaFwiLCB7XG4gICAgICBiYXNlVXJsOiBzZXNzaW9uLmVudltcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl0uU2lnbmVyQXBpUm9vdC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgcGF0aDoge1xuICAgICAgICAgIG9yZ19pZDogc2Vzc2lvbi5vcmdfaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBzZXNzaW9uLnRva2VuLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IHsgZXBvY2hfbnVtLCBlcG9jaF90b2tlbiwgb3RoZXJfdG9rZW4gfSxcbiAgICB9KSxcbiAgKVxuICAgIC50aGVuKGFzc2VydE9rKVxuICAgIC50aGVuKChyZXMpID0+ICh7XG4gICAgICAuLi5zZXNzaW9uLFxuICAgICAgLi4ucmVzLFxuICAgICAgb3JnX2lkOiBzZXNzaW9uLm9yZ19pZCxcbiAgICB9KSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzYWZlIG1ldGFkYXRhIGZyb20gYSBTZXNzaW9uRGF0YVxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIFRoZSBzZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgc2Vzc2lvbiBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0YWRhdGEoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBTZXNzaW9uTWV0YWRhdGEge1xuICBjb25zdCB7IGVudiwgb3RoZXJfZW52cywgb3JnX2lkLCByb2xlX2lkLCBwdXJwb3NlLCBzZXNzaW9uX2V4cCB9ID0gc2Vzc2lvbjtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5lbnYgfTtcbiAgT2JqZWN0LmVudHJpZXMob3RoZXJfZW52cyA/PyB7fSkuZm9yRWFjaCgoW3JlZ2lvbiwgZW52XSkgPT4ge1xuICAgIG1lcmdlZFtgRGV2LUN1YmVTaWduZXJTdGFjay0ke3JlZ2lvbn1gXSA9IGVudjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZW52OiBtZXJnZWQsXG4gICAgb3JnX2lkLFxuICAgIHJvbGVfaWQsXG4gICAgcHVycG9zZSxcbiAgICBzZXNzaW9uX2lkOiBzZXNzaW9uLnNlc3Npb25faW5mby5zZXNzaW9uX2lkLFxuICAgIHNlc3Npb25fZXhwLFxuICAgIGVwb2NoOiBzZXNzaW9uLnNlc3Npb25faW5mby5lcG9jaCxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdGltZUluU2Vjb25kcyBhbiBlcG9jaCB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lc3RhbXAgaXMgYmVmb3JlIG5vdyArIERFRkFVTFRfRVhQSVJBVElPTl9CVUZGRVJfU0VDU1xuICovXG5jb25zdCBpc1dpdGhpbkJ1ZmZlciA9ICh0aW1lSW5TZWNvbmRzOiBudW1iZXIpID0+XG4gIHRpbWVJblNlY29uZHMgPCBEYXRlLm5vdygpIC8gMTAwMCArIERFRkFVTFRfRVhQSVJBVElPTl9CVUZGRVJfU0VDUztcblxuZXhwb3J0IGNvbnN0IGlzU3RhbGUgPSAoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBib29sZWFuID0+XG4gIGlzV2l0aGluQnVmZmVyKHNlc3Npb24uc2Vzc2lvbl9pbmZvLmF1dGhfdG9rZW5fZXhwKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVmcmVzaGFibGUgPSAoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBib29sZWFuID0+XG4gICFpc1dpdGhpbkJ1ZmZlcihzZXNzaW9uLnNlc3Npb25fZXhwID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgJiZcbiAgIWlzV2l0aGluQnVmZmVyKHNlc3Npb24uc2Vzc2lvbl9pbmZvLnJlZnJlc2hfdG9rZW5fZXhwKTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGJhc2U2NCBBUEkgc2Vzc2lvbiB0b2tlbi5cbiAqIENvbnN1bWVzIHRoZSBvdXRwdXQgb2YgdGhlIGNsaSBjb21tYW5kOlxuICpcbiAqIGBgYFxuICogY3MgdG9rZW4gY3JlYXRlIC0tb3V0cHV0IGJhc2U2NFxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlc3Npb25EYXRhU3RyaW5nIEJhc2U2NCBlbmNvZGVkIEFQSSBzZXNzaW9uIHRva2VuLlxuICpcbiAqIEByZXR1cm5zIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJhc2U2NFNlc3Npb25EYXRhKHNlc3Npb25EYXRhU3RyaW5nOiBzdHJpbmcpOiBTZXNzaW9uRGF0YSB7XG4gIC8vIHBhcnNlIHRva2VuLCBzdHJpcHBpbmcgd2hpdGVzcGFjZS5cbiAgY29uc3Qgc2VjcmV0QjY0VG9rZW4gPSBzZXNzaW9uRGF0YVN0cmluZy5yZXBsYWNlKC9cXHMvZywgXCJcIik7XG4gIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGF0b2Ioc2VjcmV0QjY0VG9rZW4pKTtcblxuICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIHRoZSBzZXNzaW9uIGRhdGEgKGkuZS4sIG1vc3QgdHlwZXMgb2YgdG9wIGxldmVsIGZpZWxkcylcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU2Vzc2lvbiBpcyB1bmRlZmluZWRcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc2Vzc2lvbiB0byBiZSBhbiBvYmplY3RcIik7XG4gIH1cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBbXCJvcmdfaWRcIiwgXCJ0b2tlblwiXSkge1xuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBkYXRhW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGEgc3RyaW5nLCBnb3QgJHtmaWVsZFR5cGV9YCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZmllbGQgb2YgW1wicm9sZV9pZFwiLCBcInB1cnBvc2VcIl0pIHtcbiAgICBjb25zdCBmaWVsZFR5cGUgPSB0eXBlb2YgZGF0YVtmaWVsZF07XG4gICAgaWYgKGZpZWxkVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBkYXRhW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGRhdGFbZmllbGRdICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgZ290ICR7ZmllbGRUeXBlfWApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFtcInNlc3Npb25faW5mb1wiLCBcImVudlwiXSkge1xuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBkYXRhW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGFuIG9iamVjdCwgZ290ICR7ZmllbGRUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgYHJlZnJlc2hfdG9rZW5gIGZvciBvbGQgc2Vzc2lvbnMgdGhhdCBtYXkgbm90IGhhdmUgaXQgc2V0XG4gIGNvbnN0IGluZm8gPSBkYXRhW1wic2Vzc2lvbl9pbmZvXCJdIGFzIENsaWVudFNlc3Npb25JbmZvO1xuICBjb25zdCByZWZyZXNoVG9rZW4gPSBkYXRhW1wicmVmcmVzaF90b2tlblwiXTtcbiAgY29uc3QgcmVmcmVzaFRva2VuRnJvbUluZm8gPSBzZXJpYWxpemVSZWZyZXNoVG9rZW4oaW5mbyk7XG4gIGlmIChyZWZyZXNoVG9rZW4gPT09IG51bGwgfHwgcmVmcmVzaFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICBkYXRhW1wicmVmcmVzaF90b2tlblwiXSA9IHJlZnJlc2hUb2tlbkZyb21JbmZvO1xuICB9XG5cbiAgcmV0dXJuIGRhdGEgYXMgU2Vzc2lvbkRhdGE7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIHJlZnJlc2ggdG9rZW4gZnJvbSBzZXNzaW9uIGluZm9ybWF0aW9uLiBUaGUgcmVzdWx0IGlzIGEgdmFsaWQgT0F1dGggdG9rZW4uXG4gKlxuICogQHBhcmFtIGluZm8gU2Vzc2lvbiBpbmZvcm1hdGlvblxuICogQHJldHVybnMgQSByZWZyZXNoIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZWZyZXNoVG9rZW4oaW5mbzogQ2xpZW50U2Vzc2lvbkluZm8pOiBzdHJpbmcge1xuICBjb25zdCBzZXNzaW9uSWRTZXIgPSBidG9hKGluZm8uc2Vzc2lvbl9pZCk7XG4gIGNvbnN0IGF1dGhEYXRhID0gYnRvYShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBlcG9jaF9udW06IGluZm8uZXBvY2gsXG4gICAgICBlcG9jaF90b2tlbjogaW5mby5lcG9jaF90b2tlbixcbiAgICAgIG90aGVyX3Rva2VuOiBpbmZvLmF1dGhfdG9rZW4sXG4gICAgfSksXG4gICk7XG4gIHJldHVybiBgJHtDVUJFU0lHTkVSX1BSRUZJWH0ke3Nlc3Npb25JZFNlcn0uJHthdXRoRGF0YX0uJHtpbmZvLnJlZnJlc2hfdG9rZW59YDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHNlc3Npb24gZGF0YSB0byBiYXNlNjQuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZGF0YSB0byBzZXJpYWxpemVcbiAqIEByZXR1cm5zIFRoZSBzZXJpYWxpemVkIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJhc2U2NFNlc3Npb25EYXRhKHNlc3Npb246IFNlc3Npb25EYXRhKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJ0b2EoSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbikpO1xufVxuIl19
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3pDLDhDQUE4QztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztBQTJDdkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQW9CO0lBQ25ELE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2pGLENBQUM7QUFxQ0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQUlsQzs7OztPQUlHO0lBQ0gsWUFBWSxPQUFvQjtRQVJoQyxvREFBMkI7UUFDM0IsaURBQWU7UUFRYixPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsdUJBQUEsSUFBSSxxQ0FBYSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQUEsQ0FBQztRQUNuQyx1QkFBQSxJQUFJLGtDQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQUEsQ0FBQztJQUM5QixDQUFDO0lBRUQscURBQXFEO0lBQ3JELEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyx1QkFBQSxJQUFJLHlDQUFVLENBQUM7SUFDeEIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxLQUFLLENBQUMsS0FBSztRQUNULE9BQU8sdUJBQUEsSUFBSSxzQ0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjs7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQWdCLHVCQUF1QjtJQUE3QztRQUNFLDZGQUE2RjtRQUM3RixzREFBbUM7SUF5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LEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sSUFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBdUI7SUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1FBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVTtLQUM3QixDQUFDLENBQ0gsQ0FBQztJQUNGLE9BQU8sR0FBRyxpQkFBaUIsR0FBRyxZQUFZLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNqRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBb0I7SUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudkludGVyZmFjZSwgUmVnaW9uLCBTdGFja05hbWUgfSBmcm9tIFwiLi4vZW52LnRzXCI7XG5pbXBvcnQgeyBhcGlGZXRjaCwgYXNzZXJ0T2sgfSBmcm9tIFwiLi4vZmV0Y2gudHNcIjtcbmltcG9ydCB7IHJldHJ5T241WFggfSBmcm9tIFwiLi4vcmV0cnkudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50U2Vzc2lvbkluZm8gfSBmcm9tIFwiLi4vc2NoZW1hX3R5cGVzLnRzXCI7XG5cbi8qKiBQcmVmaXggdXNlZCBmb3IgQ3ViZVNpZ25lciBPQXV0aCB0b2tlbnMgKi9cbmNvbnN0IENVQkVTSUdORVJfUFJFRklYID0gXCIzZDZmZDczOTc6XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkxpZmV0aW1lIHtcbiAgLyoqIFNlc3Npb24gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBvbmUgd2VlayAoNjA0ODAwKS4gKi9cbiAgc2Vzc2lvbj86IG51bWJlcjtcbiAgLyoqIEF1dGggdG9rZW4gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBmaXZlIG1pbnV0ZXMgKDMwMCkuICovXG4gIGF1dGg/OiBudW1iZXI7XG4gIC8qKiBSZWZyZXNoIHRva2VuIGxpZmV0aW1lIChpbiBzZWNvbmRzKS4gRGVmYXVsdHMgdG8gb25lIGRheSAoODY0MDApLiAqL1xuICByZWZyZXNoPzogbnVtYmVyO1xuICAvKiogR3JhY2UgbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byAzMCBzZWNvbmRzICgzMCkuICovXG4gIGdyYWNlPzogbnVtYmVyO1xufVxuXG4vKiogSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3ViZVNpZ25lciBzZXNzaW9uIGZpbGUgZm9ybWF0ICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgLyoqIFRoZSBvcmdhbml6YXRpb24gSUQgKi9cbiAgb3JnX2lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm9sZSBJRCAqL1xuICByb2xlX2lkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBwdXJwb3NlIG9mIHRoZSBzZXNzaW9uIHRva2VuICovXG4gIHB1cnBvc2U/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIHRva2VuIHRvIGluY2x1ZGUgaW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSB0b2tlbiB0byB1c2UgdG8gcmVmcmVzaCB0aGUgc2Vzc2lvbiAqL1xuICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIGluZm8gKi9cbiAgc2Vzc2lvbl9pbmZvOiBDbGllbnRTZXNzaW9uSW5mbztcbiAgLyoqIFNlc3Npb24gZXhwaXJhdGlvbiAoaW4gc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoKSBiZXlvbmQgd2hpY2ggaXQgY2Fubm90IGJlIHJlZnJlc2hlZCAqL1xuICBzZXNzaW9uX2V4cDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsgLy8gbWF5IGJlIG1pc3NpbmcgaW4gbGVnYWN5IHNlc3Npb24gZmlsZXNcbiAgLyoqIEF2YWlsYWJsZSByZWdpb25hbCBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzICovXG4gIGVudjogUmVjb3JkPFN0YWNrTmFtZSwgRW52SW50ZXJmYWNlPjtcbiAgLyoqIE90aGVyIHJlZ2lvbmFsIGVudmlyb25tZW50cyAobm90IGluY2x1ZGVkIGluICdlbnYnKSwgbWFwcGVkIGJ5IHJlZ2lvbi4gKi9cbiAgLy8gTk9URTogdGhpcyBpcyB0aGUgZm9ybWF0IHRoZSBDTEkgcHJvZHVjZXNcbiAgb3RoZXJfZW52cz86IFJlY29yZDxSZWdpb24sIEVudkludGVyZmFjZT47XG59XG5cbi8vIFJhdGhlciB0aGFuIGp1c3QgZG9pbmcgYSBzaW1wbGUgUGljaywgd2UgZ28gdGhlIGV4dHJhIG1pbGUgdG8gZW5zdXJlIHRoYXRcbi8vIGFueSBtZXRhZGF0YSBvYmplY3QgTVVTVCBORVZFUiBpbmNsdWRlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvblxudHlwZSBTYWZlU2Vzc2lvbkRhdGFGaWVsZHMgPSBcImVudlwiIHwgXCJvcmdfaWRcIiB8IFwicm9sZV9pZFwiIHwgXCJwdXJwb3NlXCIgfCBcInNlc3Npb25fZXhwXCI7XG5cbi8qKiBSZXByZXNlbnRzIGVpdGhlciB0aGUgU2Vzc2lvbkRhdGEgb3IgYSBiYXNlNjQgSlNPTiBlbmNvZGluZyBvZiBpdCAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbkxpa2UgPSBzdHJpbmcgfCBTZXNzaW9uRGF0YTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGJhc2U2NCBlbmNvZGVkIFNlc3Npb25EYXRhLCBpZiBuZWNlc3NhcnkuXG4gKiBUaGlzIGFsbG93cyBTZXNzaW9uTWFuYWdlcnMgdG8gZWFzaWx5IGluZ2VzdCB0aGUgbXVsdGlwbGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIHNlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIFRoZSBzZXNzaW9uIG9iamVjdCBvciBlbmNvZGluZ1xuICogQHJldHVybnMgVGhlIHNlc3Npb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlc3Npb25MaWtlKHNlc3Npb246IFNlc3Npb25MaWtlKSB7XG4gIHJldHVybiB0eXBlb2Ygc2Vzc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQmFzZTY0U2Vzc2lvbkRhdGEoc2Vzc2lvbikgOiBzZXNzaW9uO1xufVxuXG4vKiogTm9uLXNlbnNpdGl2ZSBpbmZvIGFib3V0IGEgc2Vzc2lvbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk1ldGFkYXRhID0gUGljazxTZXNzaW9uRGF0YSwgU2FmZVNlc3Npb25EYXRhRmllbGRzPiAmIHtcbiAgW0sgaW4gRXhjbHVkZTxrZXlvZiBTZXNzaW9uRGF0YSwgU2FmZVNlc3Npb25EYXRhRmllbGRzPl0/OiBuZXZlcjtcbn0gJiB7IHNlc3Npb25faWQ6IHN0cmluZzsgZXBvY2g6IG51bWJlciB9O1xuXG4vKipcbiAqIEEgU2Vzc2lvbk1hbmFnZXIncyBqb2IgaXMgdG8gaGFuZGxlIHNlc3Npb24gcGVyc2lzdGVuY2UgYW5kIHJlZnJlc2hlc1xuICpcbiAqIFRoZSBpbnRlcmZhY2UgZG9lcyBub3QgaW1wb3NlICp3aGVuKiBhIHJlZnJlc2ggbXVzdCBvY2N1ciwgdGhvdWdoIHR5cGljYWxseVxuICogdGhpcyB3aWxsIGJlIG9uIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk1hbmFnZXIge1xuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGlmIGEgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGFuIGludmFsaWQgdG9rZW4uXG4gICAqL1xuICBvbkludmFsaWRUb2tlbj86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIG1ldGFkYXRhIGZvciB0aGUgc2Vzc2lvbi4gU2hvdWxkIHRocm93IGlmIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHJldHVybnMgSW5mbyBhYm91dCB0aGUgc2Vzc2lvblxuICAgKlxuICAgKiBAdGhyb3dzIHtOb1Nlc3Npb25Gb3VuZEVycm9yfSBJZiB0aGUgc2Vzc2lvbiBpcyBub3QgYXZhaWxhYmxlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBQcm9taXNlPFNlc3Npb25NZXRhZGF0YT47XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIHRva2VuIHRvIGJlIHVzZWQgZm9yIGEgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGNsaWVudFxuICAgKiB0byBwcm92aWRlIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdG9rZW5cbiAgICovXG4gIHRva2VuKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIGNvbnN0cnVjdGlvbiBvZiBjbGllbnRzIHdoaWNoIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlZnJlc2hcbiAqIHNlc3Npb25zLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWFuYWdlciA9IG5ldyBOb1JlZnJlc2hTZXNzaW9uTWFuYWdlcihzZXNzaW9uRGF0YSk7XG4gKiBjb25zdCBjbGllbnQgPSBhd2FpdCBDdWJlU2lnbmVyQ2xpZW50LmNyZWF0ZShtYW5hZ2VyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTm9SZWZyZXNoU2Vzc2lvbk1hbmFnZXIgaW1wbGVtZW50cyBTZXNzaW9uTWFuYWdlciB7XG4gICNtZXRhZGF0YTogU2Vzc2lvbk1ldGFkYXRhO1xuICAjdG9rZW46IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgbWFuYWdlciB3aXRoIHRoZSBzZXNzaW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZm9yIHRoaXMgbWFuYWdlciB0byB1c2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IFNlc3Npb25MaWtlKSB7XG4gICAgc2Vzc2lvbiA9IHBhcnNlU2Vzc2lvbkxpa2Uoc2Vzc2lvbik7XG4gICAgdGhpcy4jbWV0YWRhdGEgPSBtZXRhZGF0YShzZXNzaW9uKTtcbiAgICB0aGlzLiN0b2tlbiA9IHNlc3Npb24udG9rZW47XG4gIH1cblxuICAvKiogQHJldHVybnMgTm9uLXNlbnNpdGl2ZSBtZXRhZGF0YSBvbiB0aGUgc2Vzc2lvbiAqL1xuICBhc3luYyBtZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy4jbWV0YWRhdGE7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHRva2VuIHRvIHVzZSBmb3IgcmVxdWVzdHMgKi9cbiAgYXN5bmMgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Rva2VuO1xuICB9XG59XG5cbi8qKlxuICogQSB0ZW1wbGF0ZSBmb3Igc2Vzc2lvbiBtYW5hZ2VycyB3aGljaCBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYSBzZXNzaW9uXG4gKiBhbmQgY2FuIHN0b3JlL2xvYWQgdGhlbSBmcmVlbHkuXG4gKlxuICogSXQgaXMgTk9UIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgbXVsdGlwbGUgY2xpZW50cyBhcmUgdXNpbmcgdGhlIHNhbWVcbiAqIHNlc3Npb24gYXMgdGhleSB3aWxsIGJvdGggYXR0ZW1wdCB0byByZWZyZXNoIGluZGVwZW5kZW50bHkuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFeGNsdXNpdmVTZXNzaW9uTWFuYWdlciBpbXBsZW1lbnRzIFNlc3Npb25NYW5hZ2VyIHtcbiAgLyoqIElmIHByZXNlbnQsIHRoZSBzZXNzaW9uIGlzIGN1cnJlbnRseSByZWZyZXNoaW5nLiBBd2FpdCB0byBnZXQgdGhlIGZyZXNoZXN0IFNlc3Npb25EYXRhICovXG4gICNyZWZyZXNoaW5nPzogUHJvbWlzZTxTZXNzaW9uRGF0YT47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBTZXNzaW9uRGF0YSBmcm9tIHN0b3JhZ2VcbiAgICovXG4gIGFic3RyYWN0IHJldHJpZXZlKCk6IFByb21pc2U8U2Vzc2lvbkRhdGE+O1xuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgU2Vzc2lvbkRhdGEgaW50byBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlXG4gICAqL1xuICBhYnN0cmFjdCBzdG9yZShkYXRhOiBTZXNzaW9uRGF0YSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBzZXNzaW9uIG1ldGFkYXRhLCBsb2FkZWQgZnJvbSBzdG9yYWdlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBQcm9taXNlPFNlc3Npb25NZXRhZGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJldHJpZXZlKCkudGhlbihtZXRhZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHRva2VuIGxvYWRlZCBmcm9tIHN0b3JhZ2UsIHJlZnJlc2hpbmcgaWYgbmVjZXNzYXJ5XG4gICAqL1xuICBhc3luYyB0b2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJldHJpZXZlKCk7XG5cbiAgICB0aGlzLiNyZWZyZXNoaW5nID8/PSByZWZyZXNoSWZOZWNlc3NhcnkoZGF0YSlcbiAgICAgID8udGhlbihhc3luYyAoZGF0YSkgPT4gKGF3YWl0IHRoaXMuc3RvcmUoZGF0YSksIGRhdGEpKVxuICAgICAgPy5maW5hbGx5KCgpID0+ICh0aGlzLiNyZWZyZXNoaW5nID0gdW5kZWZpbmVkKSk7XG5cbiAgICAvLyBUZWNobmljYWxseSwgaW4gbWFueSBjYXNlcyB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3YWl0IGZvciB0aGUgcmVmcmVzaCxcbiAgICAvLyB0aGUgc2Vzc2lvbiB3aWxsIHN0aWxsIGJlIHZhbGlkIGZvciBhIHdoaWxlIGFmdGVyIHRoZSByZWZyZXNoIHN0YXJ0cy5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHNvbWV0aW1lcyB0aGUgYXV0aCB0b2tlbiB3aWxsIGJlIGVudGlyZWx5IGV4cGlyZWQsIHNvIHdlIGNvbnNlcnZhdGl2ZWx5XG4gICAgLy8gd2FpdCBmb3IgYSBzdWNjZXNzZnVsIHJlZnJlc2hcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy4jcmVmcmVzaGluZyA/IGF3YWl0IHRoaXMuI3JlZnJlc2hpbmcgOiBkYXRhO1xuICAgIHJldHVybiBzZXNzaW9uLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGZvcmNlIGEgdG9rZW4gcmVmcmVzaFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgcmVmcmVzaGVkIHNlc3Npb24gZGF0YVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFzeW5jIGZvcmNlUmVmcmVzaCgpOiBQcm9taXNlPFNlc3Npb25EYXRhPiB7XG4gICAgLy8gSWYgbm90IGN1cnJlbnRseSByZWZyZXNoaW5nLCBzdGFydCByZWZyZXNoaW5nXG4gICAgdGhpcy4jcmVmcmVzaGluZyA/Pz0gdGhpcy5yZXRyaWV2ZSgpXG4gICAgICAudGhlbihyZWZyZXNoKVxuICAgICAgLnRoZW4oYXN5bmMgKGRhdGEpID0+IChhd2FpdCB0aGlzLnN0b3JlKGRhdGEpLCBkYXRhKSlcbiAgICAgIC5maW5hbGx5KCgpID0+ICh0aGlzLiNyZWZyZXNoaW5nID0gdW5kZWZpbmVkKSk7XG5cbiAgICAvLyBCZWNhdXNlIHdlID8/PSBhc3NpZ25lZCB0byByZWZyZXNoaW5nIGFib3ZlLCB3ZSdyZSBndWFyYW50ZWVkIHRvIGJlXG4gICAgLy8gYWN0aXZlbHkgcmVmcmVzaGluZywgc28ganVzdCBhd2FpdCBpdC5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jcmVmcmVzaGluZztcbiAgfVxufVxuXG4vKiogSW1wbGVtZW50cyBhIFNlc3Npb25NYW5hZ2VyIHdpdGhvdXQgcGVyc2lzdGVuY2UgKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlTZXNzaW9uTWFuYWdlciBleHRlbmRzIEV4Y2x1c2l2ZVNlc3Npb25NYW5hZ2VyIHtcbiAgLyoqIFRoZSBzZXNzaW9uIGRhdGEgY29udGFpbmluZyBib3RoIG1ldGFkYXRhIGFuZCB0b2tlbnMgKi9cbiAgI2RhdGE6IFNlc3Npb25EYXRhO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgd2l0aCBkYXRhIGluIG1lbW9yeVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgaW5pdGlhbCBzZXNzaW9uIGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFNlc3Npb25EYXRhKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNkYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB0aGUgaW4tbWVtb3J5IGRhdGEgKi9cbiAgYXN5bmMgcmV0cmlldmUoKTogUHJvbWlzZTxTZXNzaW9uRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLiNkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBpbi1tZW1vcnkgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgc2Vzc2lvbiBkYXRhIHRvIHN0b3JlXG4gICAqL1xuICBhc3luYyBzdG9yZShkYXRhOiBTZXNzaW9uRGF0YSkge1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8qKiBBbiBlcnJvciB0eXBlIHRvIGJlIHRocm93biBieSBTZXNzaW9uTWFuYWdlcidzIHdoZW4gdGhlIHNlc3Npb24gaXMgdW5hdmFpbGFibGUgKi9cbmV4cG9ydCBjbGFzcyBOb1Nlc3Npb25Gb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogQ29uc3RydWN0cyB0aGUgZXJyb3Igd2l0aCB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIk5vIHNlc3Npb24gYXZhaWxhYmxlIGZvciB0aGUgY2xpZW50XCIpO1xuICB9XG59XG5cbi8qKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGV4cGlyYXRpb24gdGltZSwgdG8gYXR0ZW1wdCBhIHJlZnJlc2ggKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUElSQVRJT05fQlVGRkVSX1NFQ1MgPSAzMDtcblxuLyoqXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCByZWZyZXNoZXMgYSBzZXNzaW9uIHVzaW5nIHRoZSBDdWJlU2lnbmVyIEFQSSBpZiBpdCBpcyBjbG9zZVxuICogdG8gZXhwaXJpbmcuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZGF0YSB3aGljaCBtYXkgcmVxdWlyZSBhIHJlZnJlc2hcbiAqIEByZXR1cm5zIEltbWVkaWF0ZWx5IHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBzZXNzaW9uIGRvZXMgbm90IHJlcXVpcmUgYSByZWZyZXNoLCBlbHNlIHJldHVybiBhIHJlZnJlc2hlZCBzZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJlZnJlc2hJZk5lY2Vzc2FyeShzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IHVuZGVmaW5lZCB8IFByb21pc2U8U2Vzc2lvbkRhdGE+IHtcbiAgaWYgKCFpc1N0YWxlKHNlc3Npb24pKSByZXR1cm47XG4gIHJldHVybiByZWZyZXNoKHNlc3Npb24pO1xufVxuXG4vKipcbiAqIEludm9rZXMgdGhlIEN1YmVTaWduZXIgQVBJIHRvIHJlZnJlc2ggYSBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIEN1YmVTaWduZXIgc2Vzc2lvbiB0byByZWZyZXNoXG4gKiBAcmV0dXJucyBBIHJlZnJlc2hlZCBzZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoKHNlc3Npb246IFNlc3Npb25EYXRhKTogUHJvbWlzZTxTZXNzaW9uRGF0YT4ge1xuICBjb25zdCB7IGVwb2NoOiBlcG9jaF9udW0sIGVwb2NoX3Rva2VuLCByZWZyZXNoX3Rva2VuOiBvdGhlcl90b2tlbiB9ID0gc2Vzc2lvbi5zZXNzaW9uX2luZm87XG4gIHJldHVybiByZXRyeU9uNVhYKCgpID0+XG4gICAgYXBpRmV0Y2goXCIvdjEvb3JnL3tvcmdfaWR9L3Rva2VuL3JlZnJlc2hcIiwgXCJwYXRjaFwiLCB7XG4gICAgICBiYXNlVXJsOiBzZXNzaW9uLmVudltcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl0uU2lnbmVyQXBpUm9vdC5yZXBsYWNlKC9cXC8kLywgXCJcIiksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgcGF0aDoge1xuICAgICAgICAgIG9yZ19pZDogc2Vzc2lvbi5vcmdfaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBzZXNzaW9uLnRva2VuLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IHsgZXBvY2hfbnVtLCBlcG9jaF90b2tlbiwgb3RoZXJfdG9rZW4gfSxcbiAgICB9KSxcbiAgKVxuICAgIC50aGVuKGFzc2VydE9rKVxuICAgIC50aGVuKChyZXMpID0+ICh7XG4gICAgICAuLi5zZXNzaW9uLFxuICAgICAgLi4ucmVzLFxuICAgICAgb3JnX2lkOiBzZXNzaW9uLm9yZ19pZCxcbiAgICB9KSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBzYWZlIG1ldGFkYXRhIGZyb20gYSBTZXNzaW9uRGF0YVxuICpcbiAqIEBwYXJhbSBzZXNzaW9uIFRoZSBzZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgc2Vzc2lvbiBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0YWRhdGEoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBTZXNzaW9uTWV0YWRhdGEge1xuICBjb25zdCB7IGVudiwgb3RoZXJfZW52cywgb3JnX2lkLCByb2xlX2lkLCBwdXJwb3NlLCBzZXNzaW9uX2V4cCB9ID0gc2Vzc2lvbjtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5lbnYgfTtcbiAgT2JqZWN0LmVudHJpZXMob3RoZXJfZW52cyA/PyB7fSkuZm9yRWFjaCgoW3JlZ2lvbiwgZW52XSkgPT4ge1xuICAgIG1lcmdlZFtgRGV2LUN1YmVTaWduZXJTdGFjay0ke3JlZ2lvbn1gXSA9IGVudjtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZW52OiBtZXJnZWQsXG4gICAgb3JnX2lkLFxuICAgIHJvbGVfaWQsXG4gICAgcHVycG9zZSxcbiAgICBzZXNzaW9uX2lkOiBzZXNzaW9uLnNlc3Npb25faW5mby5zZXNzaW9uX2lkLFxuICAgIHNlc3Npb25fZXhwLFxuICAgIGVwb2NoOiBzZXNzaW9uLnNlc3Npb25faW5mby5lcG9jaCxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdGltZUluU2Vjb25kcyBhbiBlcG9jaCB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lc3RhbXAgaXMgYmVmb3JlIG5vdyArIERFRkFVTFRfRVhQSVJBVElPTl9CVUZGRVJfU0VDU1xuICovXG5jb25zdCBpc1dpdGhpbkJ1ZmZlciA9ICh0aW1lSW5TZWNvbmRzOiBudW1iZXIpID0+XG4gIHRpbWVJblNlY29uZHMgPCBEYXRlLm5vdygpIC8gMTAwMCArIERFRkFVTFRfRVhQSVJBVElPTl9CVUZGRVJfU0VDUztcblxuZXhwb3J0IGNvbnN0IGlzU3RhbGUgPSAoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBib29sZWFuID0+XG4gIGlzV2l0aGluQnVmZmVyKHNlc3Npb24uc2Vzc2lvbl9pbmZvLmF1dGhfdG9rZW5fZXhwKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVmcmVzaGFibGUgPSAoc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBib29sZWFuID0+XG4gICFpc1dpdGhpbkJ1ZmZlcihzZXNzaW9uLnNlc3Npb25fZXhwID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgJiZcbiAgIWlzV2l0aGluQnVmZmVyKHNlc3Npb24uc2Vzc2lvbl9pbmZvLnJlZnJlc2hfdG9rZW5fZXhwKTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGJhc2U2NCBBUEkgc2Vzc2lvbiB0b2tlbi5cbiAqIENvbnN1bWVzIHRoZSBvdXRwdXQgb2YgdGhlIGNsaSBjb21tYW5kOlxuICpcbiAqIGBgYFxuICogY3MgdG9rZW4gY3JlYXRlIC0tb3V0cHV0IGJhc2U2NFxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlc3Npb25EYXRhU3RyaW5nIEJhc2U2NCBlbmNvZGVkIEFQSSBzZXNzaW9uIHRva2VuLlxuICpcbiAqIEByZXR1cm5zIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJhc2U2NFNlc3Npb25EYXRhKHNlc3Npb25EYXRhU3RyaW5nOiBzdHJpbmcpOiBTZXNzaW9uRGF0YSB7XG4gIC8vIHBhcnNlIHRva2VuLCBzdHJpcHBpbmcgd2hpdGVzcGFjZS5cbiAgY29uc3Qgc2VjcmV0QjY0VG9rZW4gPSBzZXNzaW9uRGF0YVN0cmluZy5yZXBsYWNlKC9cXHMvZywgXCJcIik7XG4gIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGF0b2Ioc2VjcmV0QjY0VG9rZW4pKTtcblxuICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIHRoZSBzZXNzaW9uIGRhdGEgKGkuZS4sIG1vc3QgdHlwZXMgb2YgdG9wIGxldmVsIGZpZWxkcylcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU2Vzc2lvbiBpcyB1bmRlZmluZWRcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc2Vzc2lvbiB0byBiZSBhbiBvYmplY3RcIik7XG4gIH1cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBbXCJvcmdfaWRcIiwgXCJ0b2tlblwiXSkge1xuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBkYXRhW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGEgc3RyaW5nLCBnb3QgJHtmaWVsZFR5cGV9YCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZmllbGQgb2YgW1wicm9sZV9pZFwiLCBcInB1cnBvc2VcIl0pIHtcbiAgICBjb25zdCBmaWVsZFR5cGUgPSB0eXBlb2YgZGF0YVtmaWVsZF07XG4gICAgaWYgKGZpZWxkVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBkYXRhW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGRhdGFbZmllbGRdICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgZ290ICR7ZmllbGRUeXBlfWApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFtcInNlc3Npb25faW5mb1wiLCBcImVudlwiXSkge1xuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBkYXRhW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZmllbGR9IHRvIGJlIGFuIG9iamVjdCwgZ290ICR7ZmllbGRUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgYHJlZnJlc2hfdG9rZW5gIGZvciBvbGQgc2Vzc2lvbnMgdGhhdCBtYXkgbm90IGhhdmUgaXQgc2V0XG4gIGNvbnN0IGluZm8gPSBkYXRhW1wic2Vzc2lvbl9pbmZvXCJdIGFzIENsaWVudFNlc3Npb25JbmZvO1xuICBjb25zdCByZWZyZXNoVG9rZW4gPSBkYXRhW1wicmVmcmVzaF90b2tlblwiXTtcbiAgY29uc3QgcmVmcmVzaFRva2VuRnJvbUluZm8gPSBzZXJpYWxpemVSZWZyZXNoVG9rZW4oaW5mbyk7XG4gIGlmIChyZWZyZXNoVG9rZW4gPT09IG51bGwgfHwgcmVmcmVzaFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICBkYXRhW1wicmVmcmVzaF90b2tlblwiXSA9IHJlZnJlc2hUb2tlbkZyb21JbmZvO1xuICB9XG5cbiAgcmV0dXJuIGRhdGEgYXMgU2Vzc2lvbkRhdGE7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIHJlZnJlc2ggdG9rZW4gZnJvbSBzZXNzaW9uIGluZm9ybWF0aW9uLiBUaGUgcmVzdWx0IGlzIGEgdmFsaWQgT0F1dGggdG9rZW4uXG4gKlxuICogQHBhcmFtIGluZm8gU2Vzc2lvbiBpbmZvcm1hdGlvblxuICogQHJldHVybnMgQSByZWZyZXNoIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSZWZyZXNoVG9rZW4oaW5mbzogQ2xpZW50U2Vzc2lvbkluZm8pOiBzdHJpbmcge1xuICBjb25zdCBzZXNzaW9uSWRTZXIgPSBidG9hKGluZm8uc2Vzc2lvbl9pZCk7XG4gIGNvbnN0IGF1dGhEYXRhID0gYnRvYShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBlcG9jaF9udW06IGluZm8uZXBvY2gsXG4gICAgICBlcG9jaF90b2tlbjogaW5mby5lcG9jaF90b2tlbixcbiAgICAgIG90aGVyX3Rva2VuOiBpbmZvLmF1dGhfdG9rZW4sXG4gICAgfSksXG4gICk7XG4gIHJldHVybiBgJHtDVUJFU0lHTkVSX1BSRUZJWH0ke3Nlc3Npb25JZFNlcn0uJHthdXRoRGF0YX0uJHtpbmZvLnJlZnJlc2hfdG9rZW59YDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHNlc3Npb24gZGF0YSB0byBiYXNlNjQuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gVGhlIHNlc3Npb24gZGF0YSB0byBzZXJpYWxpemVcbiAqIEByZXR1cm5zIFRoZSBzZXJpYWxpemVkIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJhc2U2NFNlc3Npb25EYXRhKHNlc3Npb246IFNlc3Npb25EYXRhKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJ0b2EoSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbikpO1xufVxuIl19
|