@monerium/sdk-react-provider 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/dist/index.d.ts +7 -5
- package/dist/index.js +14 -14
- package/dist/index.mjs +3 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ pnpm add @monerium/sdk-react-provider @tanstack/react-query
|
|
|
41
41
|
|
|
42
42
|
Wrap your app in the `QueryClientProvider` React Context Provider and pass a new `QueryClient` instance to the `client` property
|
|
43
43
|
|
|
44
|
-
Inside the `QueryClientProvider`, wrap your app in the `MoneriumProvider` React Context Provider and pass the auth flow's `clientId`, `
|
|
44
|
+
Inside the `QueryClientProvider`, wrap your app in the `MoneriumProvider` React Context Provider and pass the auth flow's `clientId`, `redirectUri`, and `environment` configuration.
|
|
45
45
|
|
|
46
46
|
```tsx
|
|
47
47
|
import { StrictMode } from 'react';
|
|
@@ -61,7 +61,7 @@ root.render(
|
|
|
61
61
|
<QueryClientProvider client={queryClient}>
|
|
62
62
|
<MoneriumProvider
|
|
63
63
|
clientId="f99e629b-6dca-11ee-8aa6-5273f65ed05b"
|
|
64
|
-
|
|
64
|
+
redirectUri="https://pntvgs.csb.app/"
|
|
65
65
|
environment="sandbox"
|
|
66
66
|
>
|
|
67
67
|
<App />
|
|
@@ -75,16 +75,16 @@ root.render(
|
|
|
75
75
|
|
|
76
76
|
The following hooks are now available within your application:
|
|
77
77
|
|
|
78
|
-
[useAuth](./docs/generated/functions/useAuth.md)</br>
|
|
79
|
-
[useAuthContext](./docs/generated/functions/useAuthContext.md)</br>
|
|
80
|
-
[useBalances](./docs/generated/functions/useBalances.md)</br>
|
|
81
|
-
[useLinkAddress](./docs/generated/functions/useLinkAddress.md)</br>
|
|
82
|
-
[useOrder](./docs/generated/functions/useOrder.md)</br>
|
|
83
|
-
[useOrders](./docs/generated/functions/useOrders.md)</br>
|
|
84
|
-
[usePlaceOrder](./docs/generated/functions/usePlaceOrder.md)</br>
|
|
85
|
-
[useProfile](./docs/generated/functions/useProfile.md)</br>
|
|
86
|
-
[useProfiles](./docs/generated/functions/useProfiles.md)</br>
|
|
87
|
-
[useTokens](./docs/generated/functions/useTokens.md)</br>
|
|
78
|
+
- [useAuth](./docs/generated/functions/useAuth.md)</br>
|
|
79
|
+
- [useAuthContext](./docs/generated/functions/useAuthContext.md)</br>
|
|
80
|
+
- [useBalances](./docs/generated/functions/useBalances.md)</br>
|
|
81
|
+
- [useLinkAddress](./docs/generated/functions/useLinkAddress.md)</br>
|
|
82
|
+
- [useOrder](./docs/generated/functions/useOrder.md)</br>
|
|
83
|
+
- [useOrders](./docs/generated/functions/useOrders.md)</br>
|
|
84
|
+
- [usePlaceOrder](./docs/generated/functions/usePlaceOrder.md)</br>
|
|
85
|
+
- [useProfile](./docs/generated/functions/useProfile.md)</br>
|
|
86
|
+
- [useProfiles](./docs/generated/functions/useProfiles.md)</br>
|
|
87
|
+
- [useTokens](./docs/generated/functions/useTokens.md)</br>
|
|
88
88
|
|
|
89
89
|
### Example
|
|
90
90
|
|
package/dist/index.d.ts
CHANGED
|
@@ -11,13 +11,15 @@ export { AuthContext, Balances, LinkAddress, Order, OrderState, Profile, Token }
|
|
|
11
11
|
* @param params
|
|
12
12
|
* @param params.children - Rest of the application.
|
|
13
13
|
* @param params.clientId - Monerium auth flow client id.
|
|
14
|
-
* @param params.
|
|
14
|
+
* @param params.redirectUri - Monerium auth flow redirect url.
|
|
15
15
|
* @param params.environment - Monerium environment.
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
declare const MoneriumProvider: ({ children, clientId, redirectUrl, environment, }: {
|
|
18
|
+
declare const MoneriumProvider: ({ children, clientId, redirectUrl, redirectUri, environment, }: {
|
|
19
19
|
children: ReactNode;
|
|
20
|
-
clientId
|
|
20
|
+
clientId: string;
|
|
21
|
+
redirectUri: string;
|
|
22
|
+
/** @deprecated use redirectUri */
|
|
21
23
|
redirectUrl?: string;
|
|
22
24
|
environment?: "sandbox" | "production";
|
|
23
25
|
}) => react_jsx_runtime.JSX.Element;
|
|
@@ -272,8 +274,8 @@ declare const keys: {
|
|
|
272
274
|
*
|
|
273
275
|
* authorize(); // Redirects to the Monerium auth flow.
|
|
274
276
|
*
|
|
275
|
-
* // To opt-in to automated wallet linking, pass the address, signature and
|
|
276
|
-
* authorize({ address, signature,
|
|
277
|
+
* // To opt-in to automated wallet linking, pass the address, signature and chain.
|
|
278
|
+
* authorize({ address, signature, chain }).
|
|
277
279
|
* ```
|
|
278
280
|
*
|
|
279
281
|
* @returns {UseAuthReturn}
|
package/dist/index.js
CHANGED
|
@@ -5,20 +5,20 @@ var reactQuery = require('@tanstack/react-query');
|
|
|
5
5
|
var sdk = require('@monerium/sdk');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
|
|
8
|
-
var y=react.createContext(null);var
|
|
8
|
+
var y=react.createContext(null);var T=({children:e,clientId:t,redirectUrl:r,redirectUri:o,environment:n="sandbox"})=>{let u=reactQuery.useQueryClient(),[s,i]=react.useState(),[a,d]=react.useState(!1),[A,g]=react.useState(null),[b,z]=react.useState(!0);react.useEffect(()=>{let h=new sdk.MoneriumClient({environment:n,clientId:t,redirectUri:o||r});i(h);},[]),react.useEffect(()=>((async()=>{if(s)try{d(await s.getAccess());}catch(p){console.error("Failed to get access:",p);}finally{z(!1);}})(),()=>{s&&s.disconnect();}),[s]);let v=react.useCallback(async h=>{try{s&&await s.authorize(h);}catch(p){console.error("Error during authorization:",p),g(p);}},[s]),C=async()=>{try{s&&await s.revokeAccess();}catch(h){console.error("Error during revoking access:",h),g(h);}finally{u.clear(),d(!1);}};return jsxRuntime.jsx(y.Provider,{value:{sdk:s,authorize:v,isAuthorized:a,isLoading:b,error:A,disconnect:async()=>s?.disconnect(),revokeAccess:async()=>C()},children:e})};var c={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getBalances:e=>["monerium","balances",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function l(){let e=react.useContext(y);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function f(){let e=react.useContext(y);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function M({query:e}={}){let{isAuthorized:t}=f(),r=l(),{data:o,...n}=reactQuery.useQuery({...e,queryKey:c.getAuthContext,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return r.getAuthContext()},enabled:!!(r&&t&&(e?.enabled??!0))});return {authContext:o,...n}}function W({profileId:e,query:t}={}){let{isAuthorized:r}=f(),o=l(),{authContext:n}=M(),u=e||n?.defaultProfile,{data:s,...i}=reactQuery.useQuery({...t,queryKey:c.getProfile(u),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");if(!u)throw new Error("Profile Id is required");return o.getProfile(u)},enabled:!!(o&&r&&u&&(t?.enabled??!0))});return {profile:s,...i}}function X({query:e}={}){let{isAuthorized:t}=f(),r=l(),{data:o,...n}=reactQuery.useQuery({...e,queryKey:c.getProfiles,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return r.getProfiles()},enabled:!!(r&&t&&(e?.enabled??!0))});return {profiles:o,...n}}function Y({query:e}={}){let t=l(),{isAuthorized:r}=f(),{data:o,...n}=reactQuery.useQuery({...e,queryKey:c.getTokens,queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return t.getTokens()},enabled:!!(t&&r&&(e?.enabled??!0))});return {tokens:o,...n}}function Z({profileId:e,query:t}={}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=reactQuery.useQuery({...t,queryKey:c.getBalances(e),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.getBalances(e)},enabled:!!(r&&o&&(t?.enabled??!0))});return {balances:n,...u}}function _({orderId:e,query:t={}}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=reactQuery.useQuery({...t,queryKey:c.getOrder(e),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return r.getOrder(e)},enabled:!!(r&&o&&e&&(t.enabled??!0))});return {order:n,...u}}function $({query:e={},...t}={}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=reactQuery.useQuery({...e,queryKey:c.getOrders(t),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.getOrders(t)},enabled:!!(r&&o&&(e.enabled??!0))});return {orders:n,...u}}function j({supportingDocument:e,mutation:t}={}){let r=l(),{isAuthorized:o}=f(),n=reactQuery.useQueryClient(),{mutateAsync:u,...s}=reactQuery.useMutation({...t,mutationKey:c.placeOrder,mutationFn:async i=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");let a;if(parseInt(i.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");a=(await r.uploadSupportingDocument(e)).id;}let d={...i,documentId:a};return r.placeOrder(d)},onSuccess(i,a,d){n.invalidateQueries({queryKey:c.getOrders()}),t?.onSuccess?.(i,a,d);},onError(i,a,d){throw t?.onError?.(i,a,d),i}});return {placeOrder:u,...s}}function ee({profileId:e,mutation:t}){let r=l(),{isAuthorized:o}=f(),n=reactQuery.useQueryClient(),{mutateAsync:u,...s}=reactQuery.useMutation({...t,mutationKey:c.linkAddress,mutationFn:async i=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.linkAddress(e,i)},onSuccess(i,a,d){n.invalidateQueries({queryKey:c.getProfile(e)}),t?.onSuccess?.(i,a,d);},onError(i,a,d){throw t?.onError?.(i,a,d),i}});return {linkAddress:u,...s}}
|
|
9
9
|
|
|
10
10
|
exports.MoneriumContext = y;
|
|
11
|
-
exports.MoneriumProvider =
|
|
12
|
-
exports.keys =
|
|
13
|
-
exports.useAuth =
|
|
14
|
-
exports.useAuthContext =
|
|
15
|
-
exports.useBalances =
|
|
16
|
-
exports.useLinkAddress =
|
|
17
|
-
exports.useOrder =
|
|
18
|
-
exports.useOrders =
|
|
19
|
-
exports.usePlaceOrder =
|
|
20
|
-
exports.useProfile =
|
|
21
|
-
exports.useProfiles =
|
|
22
|
-
exports.useTokens =
|
|
11
|
+
exports.MoneriumProvider = T;
|
|
12
|
+
exports.keys = c;
|
|
13
|
+
exports.useAuth = f;
|
|
14
|
+
exports.useAuthContext = M;
|
|
15
|
+
exports.useBalances = Z;
|
|
16
|
+
exports.useLinkAddress = ee;
|
|
17
|
+
exports.useOrder = _;
|
|
18
|
+
exports.useOrders = $;
|
|
19
|
+
exports.usePlaceOrder = j;
|
|
20
|
+
exports.useProfile = W;
|
|
21
|
+
exports.useProfiles = X;
|
|
22
|
+
exports.useTokens = Y;
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJsIiwiZW52aXJvbm1lbnQiLCJxdWVyeUNsaWVudCIsInVzZVF1ZXJ5Q2xpZW50Iiwic2RrIiwic2V0U2RrIiwidXNlU3RhdGUiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsInNka0luc3RhbmNlIiwiTW9uZXJpdW1DbGllbnQiLCJhdXRob3JpemUiLCJ1c2VDYWxsYmFjayIsInBhcmFtcyIsImVyciIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlSWQiLCJvcmRlcklkIiwiZmlsdGVyIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsImRhdGEiLCJyZXN0IiwidXNlUXVlcnkiLCJ1c2VQcm9maWxlIiwiYXV0aENvbnRleHQiLCJwcm9maWxlSWRUb1VzZSIsInVzZVByb2ZpbGVzIiwidXNlVG9rZW5zIiwidXNlQmFsYW5jZXMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwibXV0YXRpb24iLCJtdXRhdGVBc3luYyIsInVzZU11dGF0aW9uIiwiYm9keSIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidmFyaWFibGVzIiwidmFycyIsInVzZUxpbmtBZGRyZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSU8sSUFBTUEsQ0FBa0JDLENBQUFBLG1CQUFBQSxDQUU3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QUFBLENBQVMsQ0FDckMsQ0FBQyxFQUVEdUIsQ0FBVSxFQUFBLFNBQUEsR0FBWWQsQ0FBTW9CLENBQUFBLENBQUFBLENBQVd6QixDQUFPLEVBQ2hELENBQUEsQ0FDQSxPQUFRbEIsQ0FBQUEsQ0FBQUEsQ0FBTzRDLEVBQU0xQixDQUFTLENBQUEsQ0FFNUIsTUFBQW1CLENBQUFBLEVBQVUsT0FBVXJDLEdBQUFBLENBQUFBLENBQU80QyxDQUFNMUIsQ0FBQUEsQ0FBTyxFQUNsQ2xCLENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsV0FBQSxDQUFhc0MsQ0FDYixDQUFBLEdBQUdkLENBQ0wsQ0FDRiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQgeyBNb25lcml1bUNsaWVudCB9IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgQXV0aG9yaXplUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUGxhY2UgdGhpcyBwcm92aWRlciBhdCB0aGUgcm9vdCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICogQGdyb3VwIFByb3ZpZGVyXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLmNoaWxkcmVuIC0gUmVzdCBvZiB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gcGFyYW1zLmNsaWVudElkIC0gTW9uZXJpdW0gYXV0aCBmbG93IGNsaWVudCBpZC5cbiAqIEBwYXJhbSBwYXJhbXMucmVkaXJlY3RVcmwgLSBNb25lcml1bSBhdXRoIGZsb3cgcmVkaXJlY3QgdXJsLlxuICogQHBhcmFtIHBhcmFtcy5lbnZpcm9ubWVudCAtIE1vbmVyaXVtIGVudmlyb25tZW50LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQgPSAnZjk5ZTYyOWItNmRjYS0xMWVlLThhYTYtNTI3M2Y2NWVkMDViJyxcbiAgcmVkaXJlY3RVcmwgPSAnaHR0cDovL2xvY2FsaG9zdDo1MTczJyxcbiAgZW52aXJvbm1lbnQgPSAnc2FuZGJveCcsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCBbc2RrLCBzZXRTZGtdID0gdXNlU3RhdGU8TW9uZXJpdW1DbGllbnQ+KCk7XG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2RrSW5zdGFuY2UgPSBuZXcgTW9uZXJpdW1DbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgY2xpZW50SWQsXG4gICAgICByZWRpcmVjdFVybCxcbiAgICB9KTtcbiAgICBzZXRTZGsoc2RrSW5zdGFuY2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtcz86IEF1dGhvcml6ZVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5hdXRob3JpemUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBhdXRob3JpemF0aW9uOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHJldm9rZUFjY2VzcyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBhd2FpdCBzZGsucmV2b2tlQWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmV2b2tpbmcgYWNjZXNzOicsIGVycik7XG4gICAgICBzZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyeUNsaWVudC5jbGVhcigpO1xuICAgICAgc2V0SXNBdXRob3JpemVkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8TW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBzZGssXG4gICAgICAgIGF1dGhvcml6ZSxcbiAgICAgICAgaXNBdXRob3JpemVkLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmdBdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZGlzY29ubmVjdDogYXN5bmMgKCkgPT4gc2RrPy5kaXNjb25uZWN0KCksXG4gICAgICAgIHJldm9rZUFjY2VzczogYXN5bmMgKCkgPT4gcmV2b2tlQWNjZXNzKCksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L01vbmVyaXVtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBdXRoQ29udGV4dCxcbiAgQmFsYW5jZXMsXG4gIExpbmtBZGRyZXNzLFxuICBMaW5rZWRBZGRyZXNzLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyU3RhdGUsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIE11dGF0aW9uT3B0aW9ucyxcbiAgTXV0YXRpb25SZXN1bHQsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlSZXN1bHQsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5c1xuICogKi9cbmV4cG9ydCBjb25zdCBrZXlzID0ge1xuICBnZXRBbGw6IFsnbW9uZXJpdW0nXSxcbiAgZ2V0QXV0aENvbnRleHQ6IFsnbW9uZXJpdW0nLCAnYXV0aC1jb250ZXh0J10sXG4gIGdldFByb2ZpbGU6IChwcm9maWxlSWQ6IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3Byb2ZpbGUnLFxuICAgIC4uLihwcm9maWxlSWQgPyBbcHJvZmlsZUlkXSA6IFtdKSxcbiAgXSxcbiAgZ2V0UHJvZmlsZXM6IFsnbW9uZXJpdW0nLCAncHJvZmlsZXMnXSxcbiAgZ2V0QmFsYW5jZXM6IChwcm9maWxlSWQ/OiBzdHJpbmcpID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgLi4uKHByb2ZpbGVJZCA/IFtwcm9maWxlSWRdIDogW10pLFxuICBdLFxuICBnZXRUb2tlbnM6IFsnbW9uZXJpdW0nLCAndG9rZW5zJ10sXG4gIGdldE9yZGVyOiAob3JkZXJJZDogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ29yZGVyJywgb3JkZXJJZF0sXG4gIGdldE9yZGVyczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdvcmRlcnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHsgYXV0aG9yaXplLCBpc0F1dGhvcml6ZWQsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZUF1dGgoKTtcbiAqXG4gKiBhdXRob3JpemUoKTsgLy8gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKlxuICogLy8gVG8gb3B0LWluIHRvIGF1dG9tYXRlZCB3YWxsZXQgbGlua2luZywgcGFzcyB0aGUgYWRkcmVzcywgc2lnbmF0dXJlIGFuZCBjaGFpbklkLlxuICogYXV0aG9yaXplKHsgYWRkcmVzcywgc2lnbmF0dXJlLCBjaGFpbklkIH0pLlxuICogYGBgXG4gKlxuICogQHJldHVybnMge1VzZUF1dGhSZXR1cm59XG4gKiAtIGBhdXRob3JpemVgICAtIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc0F1dGhvcml6ZWQ6IGNvbnRleHQuaXNBdXRob3JpemVkLFxuICAgIGF1dGhvcml6ZTogY29udGV4dC5hdXRob3JpemUsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCB0aGUgYXV0aGVudGljYXRpb24gY29udGV4dC5cbiAqIEBncm91cCBIb29rc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QXV0aENvbnRleHQ+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgYXV0aENvbnRleHQsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUF1dGhDb250ZXh0KCk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9hdXRoLWNvbnRleHQpXG4gKlxuICogW0F1dGhDb250ZXh0IGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9BdXRoQ29udGV4dC5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGhDb250ZXh0KHtcbiAgcXVlcnksXG59OiB7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPEF1dGhDb250ZXh0Pjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdhdXRoQ29udGV4dCcsIEF1dGhDb250ZXh0PiB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEF1dGhDb250ZXh0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEF1dGhDb250ZXh0KCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgYXV0aENvbnRleHQ6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCBzaW5nbGUgcHJvZmlsZVxuICogSWYgbm8gYHByb2ZpbGVJZGAgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZUlkXSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxQcm9maWxlPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHByb2ZpbGUsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlKVxuICpcbiAqIFtQcm9maWxlIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9Qcm9maWxlLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGVJZCxcbiAgcXVlcnksXG59OiB7XG4gIHByb2ZpbGVJZD86IHN0cmluZztcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZT47XG59ID0ge30pOiBRdWVyeVJlc3VsdDwncHJvZmlsZScsIFByb2ZpbGU+IHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgYXV0aENvbnRleHQgfSA9IHVzZUF1dGhDb250ZXh0KCk7XG5cbiAgY29uc3QgcHJvZmlsZUlkVG9Vc2UgPSBwcm9maWxlSWQgfHwgKGF1dGhDb250ZXh0Py5kZWZhdWx0UHJvZmlsZSBhcyBzdHJpbmcpO1xuXG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZUlkVG9Vc2UpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXByb2ZpbGVJZFRvVXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZmlsZSBJZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGUocHJvZmlsZUlkVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZUlkVG9Vc2UgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpXG4gICAgKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvZmlsZTogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPFByb2ZpbGVbXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwcm9maWxlcywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlUHJvZmlsZXMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcylcbiAqXG4gKiBbUHJvZmlsZSBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvUHJvZmlsZS5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGVzKHtcbiAgcXVlcnksXG59OiB7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVbXT47XG59ID0ge30pOiBRdWVyeVJlc3VsdDwncHJvZmlsZXMnLCBQcm9maWxlW10+IHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEdldCB0b2tlbnNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxUb2tlbltdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHRva2VucywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlVG9rZW5zKCk7XG4gKiBgYGBcblxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vdG9rZW5zKVxuICpcbiAqIFtUb2tlbiBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvVG9rZW4ubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbnMoe1xuICBxdWVyeSxcbn06IHsgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT4gfSA9IHt9KTogUXVlcnlSZXN1bHQ8J3Rva2VucycsIFRva2VuW10+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFRva2VucyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRUb2tlbnMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCBiYWxhbmNlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzW10+fSBbcGFyYW1zLnByb2ZpbGVJZF0gRmV0Y2ggYmFsYW5jZXMgZm9yIGEgc3BlY2lmaWMgcHJvZmlsZS5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGJhbGFuY2VzLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWJhbGFuY2VzKVxuICpcbiAqIFtCYWxhbmNlcyBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvQmFsYW5jZXMubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYWxhbmNlcyh7XG4gIHByb2ZpbGVJZCxcbiAgcXVlcnksXG59OiB7XG4gIHByb2ZpbGVJZD86IHN0cmluZztcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QmFsYW5jZXNbXT47XG59ID0ge30pOiBRdWVyeVJlc3VsdDwnYmFsYW5jZXMnLCBCYWxhbmNlc1tdPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEJhbGFuY2VzKHByb2ZpbGVJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QmFsYW5jZXMocHJvZmlsZUlkKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBiYWxhbmNlczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IHNpbmdsZSBvcmRlclxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zLm9yZGVySWQgVGhlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPE9yZGVyPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgb3JkZXIsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyKVxuICpcbiAqIFtPcmRlciBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvT3JkZXIubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcmRlcih7XG4gIG9yZGVySWQsXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIG9yZGVySWQ6IHN0cmluZztcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXI+O1xufSk6IFF1ZXJ5UmVzdWx0PCdvcmRlcicsIE9yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcihvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFvcmRlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3JkZXIgaWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcihvcmRlcklkKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBvcmRlcklkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb3JkZXI6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCBvcmRlcnNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5hZGRyZXNzXSBGaWx0ZXIgYmFzZWQgb24gdGhlIGJsb2NrY2hhaW4gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yZGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMubWVtb10gRmlsdGVyIGJ5IHRoZSBwYXltZW50IG1lbW8vcmVmZXJlbmNlLi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgcHJvZmlsZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIG9yZGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMudHhIYXNoXSBGaWx0ZXIgYmFzZWQgb24gdGhlIGJsb2NrY2hhaW4gdHJhbnNhY3Rpb24gaGFzaC5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPE9yZGVyW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgb3JkZXJzLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vb3JkZXJzKVxuICpcbiAqIFtPcmRlciBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvT3JkZXIubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcmRlcnMoe1xuICBxdWVyeSA9IHt9LFxuICAuLi5maWx0ZXJzXG59OiB7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyW10+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdvcmRlcnMnLCBPcmRlcltdPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBvcmRlcnM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIFBsYWNlIGFuIG9yZGVyLlxuICogV2hlbiB0aGUgb3JkZXIgaGFzIGJlZW4gcGxhY2VkLCB0aGUgb3JkZXJzIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogSWYgdGhlIG9yZGVyIGFtb3VudCBpcyBhYm92ZSAxNTAwMCwgYSBzdXBwb3J0aW5nIGRvY3VtZW50IGlzIHJlcXVpcmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0gcGFyYW1cbiAqIEBwYXJhbSB7RmlsZX0gcGFyYW0uc3VwcG9ydGluZ0RvY3VtZW50IFN1cHBvcnRpbmcgZG9jdW1lbnQgZmlsZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbS5tdXRhdGlvbiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wb3N0LW9yZGVycylcbiAqXG4gKiBbTmV3T3JkZXIgdHlwZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvdHlwZS1hbGlhc2VzL05ld09yZGVyLm1kKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8T3JkZXIsIEVycm9yLCBOZXdPcmRlcj47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDwncGxhY2VPcmRlcicsIE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMucGxhY2VPcmRlcixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTmV3T3JkZXIpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgZG9jdW1lbnRJZDtcbiAgICAgIGlmIChwYXJzZUludChib2R5LmFtb3VudCkgPiAxNTAwMCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRpbmdEb2N1bWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdTdXBwb3J0aW5nIGRvY3VtZW50IGlzIHJlcXVpcmVkIGZvciBvcmRlcnMgYWJvdmUgMTUwMDAnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGxvYWRlZERvY3VtZW50ID1cbiAgICAgICAgICBhd2FpdCBzZGsudXBsb2FkU3VwcG9ydGluZ0RvY3VtZW50KHN1cHBvcnRpbmdEb2N1bWVudCk7XG4gICAgICAgIGRvY3VtZW50SWQgPSB1cGxvYWRlZERvY3VtZW50LmlkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdCb2R5ID0ge1xuICAgICAgICAuLi5ib2R5LFxuICAgICAgICBkb2N1bWVudElkOiBkb2N1bWVudElkLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHNkay5wbGFjZU9yZGVyKG5ld0JvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVycygpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKiBXaGVuIHRoZSBhZGRyZXNzIGhhcyBiZWVuIGxpbmtlZCwgdGhlIHJlbGV2YW50IHByb2ZpbGUgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5wcm9maWxlSWQgV2hpY2ggcHJvZmlsZSB0byBsaW5rIHRoZSBhZGRyZXNzLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtLm11dGF0aW9uIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBsaW5rQWRkcmVzcywgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlTGlua0FkZHJlc3MoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZS1hZGRyZXNzZXMpXG4gKlxuICogW0xpbmtBZGRyZXNzIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9MaW5rQWRkcmVzcy5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxpbmtBZGRyZXNzKHtcbiAgcHJvZmlsZUlkLFxuICBtdXRhdGlvbixcbn06IHtcbiAgcHJvZmlsZUlkOiBzdHJpbmc7XG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz47XG59KTogTXV0YXRpb25SZXN1bHQ8J2xpbmtBZGRyZXNzJywgTGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLmxpbmtBZGRyZXNzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBMaW5rQWRkcmVzcykgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsubGlua0FkZHJlc3MocHJvZmlsZUlkLCBib2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVJZCksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuIl19
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJsIiwicmVkaXJlY3RVcmkiLCJlbnZpcm9ubWVudCIsInF1ZXJ5Q2xpZW50IiwidXNlUXVlcnlDbGllbnQiLCJzZGsiLCJzZXRTZGsiLCJ1c2VTdGF0ZSIsImlzQXV0aG9yaXplZCIsInNldElzQXV0aG9yaXplZCIsImVycm9yIiwic2V0RXJyb3IiLCJsb2FkaW5nQXV0aCIsInNldExvYWRpbmdBdXRoIiwidXNlRWZmZWN0Iiwic2RrSW5zdGFuY2UiLCJNb25lcml1bUNsaWVudCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwicmV2b2tlQWNjZXNzIiwianN4Iiwia2V5cyIsInByb2ZpbGVJZCIsIm9yZGVySWQiLCJmaWx0ZXIiLCJ1c2VTZGsiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsInVzZUF1dGgiLCJ1c2VBdXRoQ29udGV4dCIsInF1ZXJ5IiwiZGF0YSIsInJlc3QiLCJ1c2VRdWVyeSIsInVzZVByb2ZpbGUiLCJhdXRoQ29udGV4dCIsInByb2ZpbGVJZFRvVXNlIiwidXNlUHJvZmlsZXMiLCJ1c2VUb2tlbnMiLCJ1c2VCYWxhbmNlcyIsInVzZU9yZGVyIiwidXNlT3JkZXJzIiwiZmlsdGVycyIsInVzZVBsYWNlT3JkZXIiLCJzdXBwb3J0aW5nRG9jdW1lbnQiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwidXNlTXV0YXRpb24iLCJib2R5IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ2YXJpYWJsZXMiLCJ2YXJzIiwidXNlTGlua0FkZHJlc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJTyxJQUFNQSxDQUFrQkMsQ0FB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QixFQUFZLGlCQUFrQixDQUFBLENBQzVCLFFBQVVvQixDQUFBQSxDQUFBQSxDQUFLLFVBQVdDLENBQUFBLENBQVMsQ0FDckMsQ0FBQyxFQUVEdUIsQ0FBVSxFQUFBLFNBQUEsR0FBWWQsQ0FBTW9CLENBQUFBLENBQUFBLENBQVd6QixDQUFPLEVBQ2hELENBQUEsQ0FDQSxPQUFRbEIsQ0FBQUEsQ0FBQUEsQ0FBTzRDLEVBQU0xQixDQUFTLENBQUEsQ0FFNUIsTUFBQW1CLENBQUFBLEVBQVUsT0FBVXJDLEdBQUFBLENBQUFBLENBQU80QyxDQUFNMUIsQ0FBQUEsQ0FBTyxFQUNsQ2xCLENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsV0FBQSxDQUFhc0MsQ0FDYixDQUFBLEdBQUdkLENBQ0wsQ0FDRiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQgeyBNb25lcml1bUNsaWVudCB9IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgQXV0aG9yaXplUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUGxhY2UgdGhpcyBwcm92aWRlciBhdCB0aGUgcm9vdCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICogQGdyb3VwIFByb3ZpZGVyXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLmNoaWxkcmVuIC0gUmVzdCBvZiB0aGUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gcGFyYW1zLmNsaWVudElkIC0gTW9uZXJpdW0gYXV0aCBmbG93IGNsaWVudCBpZC5cbiAqIEBwYXJhbSBwYXJhbXMucmVkaXJlY3RVcmkgLSBNb25lcml1bSBhdXRoIGZsb3cgcmVkaXJlY3QgdXJsLlxuICogQHBhcmFtIHBhcmFtcy5lbnZpcm9ubWVudCAtIE1vbmVyaXVtIGVudmlyb25tZW50LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJsLFxuICByZWRpcmVjdFVyaSxcbiAgZW52aXJvbm1lbnQgPSAnc2FuZGJveCcsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgcmVkaXJlY3RVcmkgKi9cbiAgcmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50PzogJ3NhbmRib3gnIHwgJ3Byb2R1Y3Rpb24nO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nkaywgc2V0U2RrXSA9IHVzZVN0YXRlPE1vbmVyaXVtQ2xpZW50PigpO1xuICBjb25zdCBbaXNBdXRob3JpemVkLCBzZXRJc0F1dGhvcml6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPEVycm9yIHwgdW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbG9hZGluZ0F1dGgsIHNldExvYWRpbmdBdXRoXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIFNES1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNka0luc3RhbmNlID0gbmV3IE1vbmVyaXVtQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmk6IHJlZGlyZWN0VXJpIHx8IHJlZGlyZWN0VXJsLFxuICAgIH0pO1xuICAgIHNldFNkayhzZGtJbnN0YW5jZSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldExvYWRpbmdBdXRoKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25uZWN0KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGsuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGtdKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aG9yaXplUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3QgcmV2b2tlQWNjZXNzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIGF3YWl0IHNkay5yZXZva2VBY2Nlc3MoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZXZva2luZyBhY2Nlc3M6JywgZXJyKTtcbiAgICAgIHNldEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmNsZWFyKCk7XG4gICAgICBzZXRJc0F1dGhvcml6ZWQoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxNb25lcml1bUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIHNkayxcbiAgICAgICAgYXV0aG9yaXplLFxuICAgICAgICBpc0F1dGhvcml6ZWQsXG4gICAgICAgIGlzTG9hZGluZzogbG9hZGluZ0F1dGgsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBkaXNjb25uZWN0OiBhc3luYyAoKSA9PiBzZGs/LmRpc2Nvbm5lY3QoKSxcbiAgICAgICAgcmV2b2tlQWNjZXNzOiBhc3luYyAoKSA9PiByZXZva2VBY2Nlc3MoKSxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IE1vbmVyaXVtQ2xpZW50LCB7XG4gIEF1dGhDb250ZXh0LFxuICBCYWxhbmNlcyxcbiAgTGlua0FkZHJlc3MsXG4gIExpbmtlZEFkZHJlc3MsXG4gIE5ld09yZGVyLFxuICBPcmRlcixcbiAgT3JkZXJTdGF0ZSxcbiAgUHJvZmlsZSxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeVJlc3VsdCxcbiAgVXNlQXV0aFJldHVybixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBRdWVyeSBrZXlzXG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRBdXRoQ29udGV4dDogWydtb25lcml1bScsICdhdXRoLWNvbnRleHQnXSxcbiAgZ2V0UHJvZmlsZTogKHByb2ZpbGVJZDogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGVJZCA/IFtwcm9maWxlSWRdIDogW10pLFxuICBdLFxuICBnZXRQcm9maWxlczogWydtb25lcml1bScsICdwcm9maWxlcyddLFxuICBnZXRCYWxhbmNlczogKHByb2ZpbGVJZD86IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2JhbGFuY2VzJyxcbiAgICAuLi4ocHJvZmlsZUlkID8gW3Byb2ZpbGVJZF0gOiBbXSksXG4gIF0sXG4gIGdldFRva2VuczogWydtb25lcml1bScsICd0b2tlbnMnXSxcbiAgZ2V0T3JkZXI6IChvcmRlcklkOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnb3JkZXInLCBvcmRlcklkXSxcbiAgZ2V0T3JkZXJzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ29yZGVycycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBwbGFjZU9yZGVyOiBbJ21vbmVyaXVtJywgJ3BsYWNlLW9yZGVyJ10sXG4gIGxpbmtBZGRyZXNzOiBbJ21vbmVyaXVtJywgJ2xpbmstYWRkcmVzcyddLFxufTtcblxuLyoqIEludGVybmFsIGhvb2sgdG8gdXNlIFNESyAqL1xuZnVuY3Rpb24gdXNlU2RrKCk6IE1vbmVyaXVtQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2RrIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ/LnNkaztcbn1cblxuLyoqXG4gKiAjIFJlZGlyZWN0IHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBUbyBvcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nLCBwYXNzIHRoZSBhZGRyZXNzLCBzaWduYXR1cmUgYW5kIGNoYWluLlxuICogYXV0aG9yaXplKHsgYWRkcmVzcywgc2lnbmF0dXJlLCBjaGFpbiB9KS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtVc2VBdXRoUmV0dXJufVxuICogLSBgYXV0aG9yaXplYCAgLSBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIC0gYGlzQXV0aG9yaXplZGAgLSBXaGV0aGVyIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQuXG4gKiAtIGBpc0xvYWRpbmdgIC0gV2hldGhlciB0aGUgYXV0aCBmbG93IGlzIGxvYWRpbmcuXG4gKiAtIGBlcnJvcmAgLSBFcnJvciBtZXNzYWdlIGlmIHRoZSBhdXRoIGZsb3cgZmFpbHMuXG4gKiAtIGBkaXNjb25uZWN0YCAtIERpc2Nvbm5lY3QgdGhlIHVzZXIuXG4gKiAtIGByZXZva2VBY2Nlc3NgIC0gUmV2b2tlIHRoZSB1c2VyJ3MgYWNjZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aCgpOiBVc2VBdXRoUmV0dXJuIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNBdXRob3JpemVkOiBjb250ZXh0LmlzQXV0aG9yaXplZCxcbiAgICBhdXRob3JpemU6IGNvbnRleHQuYXV0aG9yaXplLFxuICAgIGlzTG9hZGluZzogY29udGV4dC5pc0xvYWRpbmcsXG4gICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgZGlzY29ubmVjdDogY29udGV4dC5kaXNjb25uZWN0LFxuICAgIHJldm9rZUFjY2VzczogY29udGV4dC5yZXZva2VBY2Nlc3MsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEF1dGhDb250ZXh0Pn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGF1dGhDb250ZXh0LCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBdXRoQ29udGV4dCgpO1xuICogYGBgXG4gKlxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vYXV0aC1jb250ZXh0KVxuICpcbiAqIFtBdXRoQ29udGV4dCBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvQXV0aENvbnRleHQubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoQ29udGV4dCh7XG4gIHF1ZXJ5LFxufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBdXRoQ29udGV4dD47XG59ID0ge30pOiBRdWVyeVJlc3VsdDwnYXV0aENvbnRleHQnLCBBdXRoQ29udGV4dD4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBdXRoQ29udGV4dCxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGF1dGhDb250ZXh0OiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgc2luZ2xlIHByb2ZpbGVcbiAqIElmIG5vIGBwcm9maWxlSWRgIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByb2ZpbGVJZF0gVGhlIGlkIG9mIHRoZSBwcm9maWxlLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8UHJvZmlsZT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwcm9maWxlLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlKCk7XG4gKiBgYGBcblxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSlcbiAqXG4gKiBbUHJvZmlsZSBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvUHJvZmlsZS5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGUoe1xuICBwcm9maWxlSWQsXG4gIHF1ZXJ5LFxufToge1xuICBwcm9maWxlSWQ/OiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGU+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J3Byb2ZpbGUnLCBQcm9maWxlPiB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGF1dGhDb250ZXh0IH0gPSB1c2VBdXRoQ29udGV4dCgpO1xuXG4gIGNvbnN0IHByb2ZpbGVJZFRvVXNlID0gcHJvZmlsZUlkIHx8IChhdXRoQ29udGV4dD8uZGVmYXVsdFByb2ZpbGUgYXMgc3RyaW5nKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVJZFRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlSWRUb1VzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2ZpbGUgSWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlKHByb2ZpbGVJZFRvVXNlKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGVJZFRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2ZpbGU6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBHZXQgcHJvZmlsZXNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxQcm9maWxlW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcHJvZmlsZXMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcblxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZXMpXG4gKlxuICogW1Byb2ZpbGUgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Byb2ZpbGUubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlcyh7XG4gIHF1ZXJ5LFxufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlW10+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J3Byb2ZpbGVzJywgUHJvZmlsZVtdPiB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGVzLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGVzKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvZmlsZXM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBHZXQgdG9rZW5zXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8VG9rZW5bXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICB0b2tlbnMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Rva2VucylcbiAqXG4gKiBbVG9rZW4gaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Rva2VuLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKHtcbiAgcXVlcnksXG59OiB7IHF1ZXJ5PzogUXVlcnlPcHRpb25zPFRva2VuW10+IH0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCd0b2tlbnMnLCBUb2tlbltdPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRUb2tlbnMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0VG9rZW5zKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgYmFsYW5jZXNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPn0gW3BhcmFtcy5wcm9maWxlSWRdIEZldGNoIGJhbGFuY2VzIGZvciBhIHNwZWNpZmljIHByb2ZpbGUuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBiYWxhbmNlcywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQmFsYW5jZXMoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZS1iYWxhbmNlcylcbiAqXG4gKiBbQmFsYW5jZXMgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0JhbGFuY2VzLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQmFsYW5jZXMoe1xuICBwcm9maWxlSWQsXG4gIHF1ZXJ5LFxufToge1xuICBwcm9maWxlSWQ/OiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPEJhbGFuY2VzW10+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J2JhbGFuY2VzJywgQmFsYW5jZXNbXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhwcm9maWxlSWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEJhbGFuY2VzKHByb2ZpbGVJZCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgYmFsYW5jZXM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCBzaW5nbGUgb3JkZXJcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcy5vcmRlcklkIFRoZSBpZCBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxPcmRlcj59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG9yZGVyLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcilcbiAqXG4gKiBbT3JkZXIgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL09yZGVyLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXIoe1xuICBvcmRlcklkLFxuICBxdWVyeSA9IHt9LFxufToge1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyPjtcbn0pOiBRdWVyeVJlc3VsdDwnb3JkZXInLCBPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXIob3JkZXJJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3JkZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09yZGVyIGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXIob3JkZXJJZCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgb3JkZXJJZCAmJiAocXVlcnkuZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9yZGVyOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgb3JkZXJzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxPcmRlcltdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG9yZGVycywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXJzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycylcbiAqXG4gKiBbT3JkZXIgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL09yZGVyLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcltdPjtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdHhIYXNoPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG59ID0ge30pOiBRdWVyeVJlc3VsdDwnb3JkZXJzJywgT3JkZXJbXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXJzKGZpbHRlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb3JkZXJzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBQbGFjZSBhbiBvcmRlci5cbiAqIFdoZW4gdGhlIG9yZGVyIGhhcyBiZWVuIHBsYWNlZCwgdGhlIG9yZGVycyBxdWVyeSB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCByZS1mZXRjaGVkLlxuICpcbiAqIElmIHRoZSBvcmRlciBhbW91bnQgaXMgYWJvdmUgMTUwMDAsIGEgc3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZC5cbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge0ZpbGV9IHBhcmFtLnN1cHBvcnRpbmdEb2N1bWVudCBTdXBwb3J0aW5nIGRvY3VtZW50IGZpbGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubXV0YXRpb24ge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHBsYWNlT3JkZXIsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVBsYWNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnMpXG4gKlxuICogW05ld09yZGVyIHR5cGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL3R5cGUtYWxpYXNlcy9OZXdPcmRlci5tZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGxhY2VPcmRlcih7XG4gIHN1cHBvcnRpbmdEb2N1bWVudCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHN1cHBvcnRpbmdEb2N1bWVudD86IEZpbGU7XG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGxhY2VPcmRlcjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBBZGQgYWRkcmVzcyB0byBwcm9maWxlLlxuICogV2hlbiB0aGUgYWRkcmVzcyBoYXMgYmVlbiBsaW5rZWQsIHRoZSByZWxldmFudCBwcm9maWxlIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0gcGFyYW1cbiAqIEBwYXJhbSB7RmlsZX0gcGFyYW0ucHJvZmlsZUlkIFdoaWNoIHByb2ZpbGUgdG8gbGluayB0aGUgYWRkcmVzcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbS5tdXRhdGlvbiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUtYWRkcmVzc2VzKVxuICpcbiAqIFtMaW5rQWRkcmVzcyBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvTGlua0FkZHJlc3MubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIHByb2ZpbGVJZCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHByb2ZpbGVJZDogc3RyaW5nO1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+O1xufSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKHByb2ZpbGVJZCwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlSWQpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsaW5rQWRkcmVzczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/index.mjs
CHANGED
|
@@ -3,8 +3,8 @@ import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
|
|
|
3
3
|
import { MoneriumClient } from '@monerium/sdk';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
|
-
var y=createContext(null);var
|
|
6
|
+
var y=createContext(null);var T=({children:e,clientId:t,redirectUrl:r,redirectUri:o,environment:n="sandbox"})=>{let u=useQueryClient(),[s,i]=useState(),[a,d]=useState(!1),[A,g]=useState(null),[b,z]=useState(!0);useEffect(()=>{let h=new MoneriumClient({environment:n,clientId:t,redirectUri:o||r});i(h);},[]),useEffect(()=>((async()=>{if(s)try{d(await s.getAccess());}catch(p){console.error("Failed to get access:",p);}finally{z(!1);}})(),()=>{s&&s.disconnect();}),[s]);let v=useCallback(async h=>{try{s&&await s.authorize(h);}catch(p){console.error("Error during authorization:",p),g(p);}},[s]),C=async()=>{try{s&&await s.revokeAccess();}catch(h){console.error("Error during revoking access:",h),g(h);}finally{u.clear(),d(!1);}};return jsx(y.Provider,{value:{sdk:s,authorize:v,isAuthorized:a,isLoading:b,error:A,disconnect:async()=>s?.disconnect(),revokeAccess:async()=>C()},children:e})};var c={getAll:["monerium"],getAuthContext:["monerium","auth-context"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getBalances:e=>["monerium","balances",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function l(){let e=useContext(y);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function f(){let e=useContext(y);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function M({query:e}={}){let{isAuthorized:t}=f(),r=l(),{data:o,...n}=useQuery({...e,queryKey:c.getAuthContext,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return r.getAuthContext()},enabled:!!(r&&t&&(e?.enabled??!0))});return {authContext:o,...n}}function W({profileId:e,query:t}={}){let{isAuthorized:r}=f(),o=l(),{authContext:n}=M(),u=e||n?.defaultProfile,{data:s,...i}=useQuery({...t,queryKey:c.getProfile(u),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");if(!u)throw new Error("Profile Id is required");return o.getProfile(u)},enabled:!!(o&&r&&u&&(t?.enabled??!0))});return {profile:s,...i}}function X({query:e}={}){let{isAuthorized:t}=f(),r=l(),{data:o,...n}=useQuery({...e,queryKey:c.getProfiles,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!t)throw new Error("User not authorized");return r.getProfiles()},enabled:!!(r&&t&&(e?.enabled??!0))});return {profiles:o,...n}}function Y({query:e}={}){let t=l(),{isAuthorized:r}=f(),{data:o,...n}=useQuery({...e,queryKey:c.getTokens,queryFn:async()=>{if(!t)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return t.getTokens()},enabled:!!(t&&r&&(e?.enabled??!0))});return {tokens:o,...n}}function Z({profileId:e,query:t}={}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=useQuery({...t,queryKey:c.getBalances(e),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.getBalances(e)},enabled:!!(r&&o&&(t?.enabled??!0))});return {balances:n,...u}}function _({orderId:e,query:t={}}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=useQuery({...t,queryKey:c.getOrder(e),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return r.getOrder(e)},enabled:!!(r&&o&&e&&(t.enabled??!0))});return {order:n,...u}}function $({query:e={},...t}={}){let r=l(),{isAuthorized:o}=f(),{data:n,...u}=useQuery({...e,queryKey:c.getOrders(t),queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.getOrders(t)},enabled:!!(r&&o&&(e.enabled??!0))});return {orders:n,...u}}function j({supportingDocument:e,mutation:t}={}){let r=l(),{isAuthorized:o}=f(),n=useQueryClient(),{mutateAsync:u,...s}=useMutation({...t,mutationKey:c.placeOrder,mutationFn:async i=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");let a;if(parseInt(i.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");a=(await r.uploadSupportingDocument(e)).id;}let d={...i,documentId:a};return r.placeOrder(d)},onSuccess(i,a,d){n.invalidateQueries({queryKey:c.getOrders()}),t?.onSuccess?.(i,a,d);},onError(i,a,d){throw t?.onError?.(i,a,d),i}});return {placeOrder:u,...s}}function ee({profileId:e,mutation:t}){let r=l(),{isAuthorized:o}=f(),n=useQueryClient(),{mutateAsync:u,...s}=useMutation({...t,mutationKey:c.linkAddress,mutationFn:async i=>{if(!r)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return r.linkAddress(e,i)},onSuccess(i,a,d){n.invalidateQueries({queryKey:c.getProfile(e)}),t?.onSuccess?.(i,a,d);},onError(i,a,d){throw t?.onError?.(i,a,d),i}});return {linkAddress:u,...s}}
|
|
7
7
|
|
|
8
|
-
export { y as MoneriumContext,
|
|
8
|
+
export { y as MoneriumContext, T as MoneriumProvider, c as keys, f as useAuth, M as useAuthContext, Z as useBalances, ee as useLinkAddress, _ as useOrder, $ as useOrders, j as usePlaceOrder, W as useProfile, X as useProfiles, Y as useTokens };
|
|
9
9
|
//# sourceMappingURL=index.mjs.map
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJsIiwiZW52aXJvbm1lbnQiLCJxdWVyeUNsaWVudCIsInVzZVF1ZXJ5Q2xpZW50Iiwic2RrIiwic2V0U2RrIiwidXNlU3RhdGUiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsInNka0luc3RhbmNlIiwiTW9uZXJpdW1DbGllbnQiLCJhdXRob3JpemUiLCJ1c2VDYWxsYmFjayIsInBhcmFtcyIsImVyciIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlSWQiLCJvcmRlcklkIiwiZmlsdGVyIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlQXV0aENvbnRleHQiLCJxdWVyeSIsImRhdGEiLCJyZXN0IiwidXNlUXVlcnkiLCJ1c2VQcm9maWxlIiwiYXV0aENvbnRleHQiLCJwcm9maWxlSWRUb1VzZSIsInVzZVByb2ZpbGVzIiwidXNlVG9rZW5zIiwidXNlQmFsYW5jZXMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwibXV0YXRpb24iLCJtdXRhdGVBc3luYyIsInVzZU11dGF0aW9uIiwiYm9keSIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidmFyaWFibGVzIiwidmFycyIsInVzZUxpbmtBZGRyZXNzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUlPLElBQU1BLENBQWtCQyxDQUFBQSxhQUFBQSxDQUU3QixJ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QyxFQUVEdUIsQ0FBVSxFQUFBLFNBQUEsR0FBWWQsQ0FBTW9CLENBQUFBLENBQUFBLENBQVd6QixDQUFPLEVBQ2hELENBQUEsQ0FDQSxPQUFRbEIsQ0FBQUEsQ0FBQUEsQ0FBTzRDLEVBQU0xQixDQUFTLENBQUEsQ0FFNUIsTUFBQW1CLENBQUFBLEVBQVUsT0FBVXJDLEdBQUFBLENBQUFBLENBQU80QyxDQUFNMUIsQ0FBQUEsQ0FBTyxFQUNsQ2xCLENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsV0FBQSxDQUFhc0MsQ0FDYixDQUFBLEdBQUdkLENBQ0wsQ0FDRiIsImZpbGUiOiJpbmRleC5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZGtJbnN0YW5jZSwgVXNlQXV0aFJldHVybiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgKFVzZUF1dGhSZXR1cm4gJiBTZGtJbnN0YW5jZSkgfCBudWxsXG4+KG51bGwpO1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IHsgTW9uZXJpdW1DbGllbnQgfSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IEF1dGhvcml6ZVBhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFBsYWNlIHRoaXMgcHJvdmlkZXIgYXQgdGhlIHJvb3Qgb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAqIEBncm91cCBQcm92aWRlclxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5jaGlsZHJlbiAtIFJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHBhcmFtcy5jbGllbnRJZCAtIE1vbmVyaXVtIGF1dGggZmxvdyBjbGllbnQgaWQuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZGlyZWN0VXJsIC0gTW9uZXJpdW0gYXV0aCBmbG93IHJlZGlyZWN0IHVybC5cbiAqIEBwYXJhbSBwYXJhbXMuZW52aXJvbm1lbnQgLSBNb25lcml1bSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBNb25lcml1bVByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsaWVudElkID0gJ2Y5OWU2MjliLTZkY2EtMTFlZS04YWE2LTUyNzNmNjVlZDA1YicsXG4gIHJlZGlyZWN0VXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NTE3MycsXG4gIGVudmlyb25tZW50ID0gJ3NhbmRib3gnLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgcmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50PzogJ3NhbmRib3gnIHwgJ3Byb2R1Y3Rpb24nO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nkaywgc2V0U2RrXSA9IHVzZVN0YXRlPE1vbmVyaXVtQ2xpZW50PigpO1xuICBjb25zdCBbaXNBdXRob3JpemVkLCBzZXRJc0F1dGhvcml6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPEVycm9yIHwgdW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbG9hZGluZ0F1dGgsIHNldExvYWRpbmdBdXRoXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIFNES1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNka0luc3RhbmNlID0gbmV3IE1vbmVyaXVtQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmwsXG4gICAgfSk7XG4gICAgc2V0U2RrKHNka0luc3RhbmNlKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29ubmVjdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRJc0F1dGhvcml6ZWQoYXdhaXQgc2RrLmdldEFjY2VzcygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGFjY2VzczonLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0TG9hZGluZ0F1dGgoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbm5lY3QoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHNkay5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW3Nka10pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM/OiBBdXRob3JpemVQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuYXV0aG9yaXplKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgYXV0aG9yaXphdGlvbjonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeSwgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQgTW9uZXJpdW1DbGllbnQsIHtcbiAgQXV0aENvbnRleHQsXG4gIEJhbGFuY2VzLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTmV3T3JkZXIsXG4gIE9yZGVyLFxuICBPcmRlclN0YXRlLFxuICBQcm9maWxlLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge1xuICBNdXRhdGlvbk9wdGlvbnMsXG4gIE11dGF0aW9uUmVzdWx0LFxuICBRdWVyeU9wdGlvbnMsXG4gIFF1ZXJ5UmVzdWx0LFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXNcbiAqICovXG5leHBvcnQgY29uc3Qga2V5cyA9IHtcbiAgZ2V0QWxsOiBbJ21vbmVyaXVtJ10sXG4gIGdldEF1dGhDb250ZXh0OiBbJ21vbmVyaXVtJywgJ2F1dGgtY29udGV4dCddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZUlkOiBzdHJpbmcpID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdwcm9maWxlJyxcbiAgICAuLi4ocHJvZmlsZUlkID8gW3Byb2ZpbGVJZF0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEJhbGFuY2VzOiAocHJvZmlsZUlkPzogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnYmFsYW5jZXMnLFxuICAgIC4uLihwcm9maWxlSWQgPyBbcHJvZmlsZUlkXSA6IFtdKSxcbiAgXSxcbiAgZ2V0VG9rZW5zOiBbJ21vbmVyaXVtJywgJ3Rva2VucyddLFxuICBnZXRPcmRlcjogKG9yZGVySWQ6IHN0cmluZykgPT4gWydtb25lcml1bScsICdvcmRlcicsIG9yZGVySWRdLFxuICBnZXRPcmRlcnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnb3JkZXJzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIHBsYWNlT3JkZXI6IFsnbW9uZXJpdW0nLCAncGxhY2Utb3JkZXInXSxcbiAgbGlua0FkZHJlc3M6IFsnbW9uZXJpdW0nLCAnbGluay1hZGRyZXNzJ10sXG59O1xuXG4vKiogSW50ZXJuYWwgaG9vayB0byB1c2UgU0RLICovXG5mdW5jdGlvbiB1c2VTZGsoKTogTW9uZXJpdW1DbGllbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VTZGsgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dD8uc2RrO1xufVxuXG4vKipcbiAqICMgUmVkaXJlY3QgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIEBncm91cCBIb29rc1xuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7IGF1dGhvcml6ZSwgaXNBdXRob3JpemVkLCBpc0xvYWRpbmcsIGVycm9yIH0gPSB1c2VBdXRoKCk7XG4gKlxuICogYXV0aG9yaXplKCk7IC8vIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICpcbiAqIC8vIFRvIG9wdC1pbiB0byBhdXRvbWF0ZWQgd2FsbGV0IGxpbmtpbmcsIHBhc3MgdGhlIGFkZHJlc3MsIHNpZ25hdHVyZSBhbmQgY2hhaW5JZC5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW5JZCB9KS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtVc2VBdXRoUmV0dXJufVxuICogLSBgYXV0aG9yaXplYCAgLSBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIC0gYGlzQXV0aG9yaXplZGAgLSBXaGV0aGVyIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQuXG4gKiAtIGBpc0xvYWRpbmdgIC0gV2hldGhlciB0aGUgYXV0aCBmbG93IGlzIGxvYWRpbmcuXG4gKiAtIGBlcnJvcmAgLSBFcnJvciBtZXNzYWdlIGlmIHRoZSBhdXRoIGZsb3cgZmFpbHMuXG4gKiAtIGBkaXNjb25uZWN0YCAtIERpc2Nvbm5lY3QgdGhlIHVzZXIuXG4gKiAtIGByZXZva2VBY2Nlc3NgIC0gUmV2b2tlIHRoZSB1c2VyJ3MgYWNjZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aCgpOiBVc2VBdXRoUmV0dXJuIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNBdXRob3JpemVkOiBjb250ZXh0LmlzQXV0aG9yaXplZCxcbiAgICBhdXRob3JpemU6IGNvbnRleHQuYXV0aG9yaXplLFxuICAgIGlzTG9hZGluZzogY29udGV4dC5pc0xvYWRpbmcsXG4gICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgZGlzY29ubmVjdDogY29udGV4dC5kaXNjb25uZWN0LFxuICAgIHJldm9rZUFjY2VzczogY29udGV4dC5yZXZva2VBY2Nlc3MsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEF1dGhDb250ZXh0Pn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGF1dGhDb250ZXh0LCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBdXRoQ29udGV4dCgpO1xuICogYGBgXG4gKlxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vYXV0aC1jb250ZXh0KVxuICpcbiAqIFtBdXRoQ29udGV4dCBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvQXV0aENvbnRleHQubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoQ29udGV4dCh7XG4gIHF1ZXJ5LFxufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBdXRoQ29udGV4dD47XG59ID0ge30pOiBRdWVyeVJlc3VsdDwnYXV0aENvbnRleHQnLCBBdXRoQ29udGV4dD4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBdXRoQ29udGV4dCxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRBdXRoQ29udGV4dCgpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGF1dGhDb250ZXh0OiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgc2luZ2xlIHByb2ZpbGVcbiAqIElmIG5vIGBwcm9maWxlSWRgIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByb2ZpbGVJZF0gVGhlIGlkIG9mIHRoZSBwcm9maWxlLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8UHJvZmlsZT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwcm9maWxlLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlKCk7XG4gKiBgYGBcblxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSlcbiAqXG4gKiBbUHJvZmlsZSBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvUHJvZmlsZS5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGUoe1xuICBwcm9maWxlSWQsXG4gIHF1ZXJ5LFxufToge1xuICBwcm9maWxlSWQ/OiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGU+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J3Byb2ZpbGUnLCBQcm9maWxlPiB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGF1dGhDb250ZXh0IH0gPSB1c2VBdXRoQ29udGV4dCgpO1xuXG4gIGNvbnN0IHByb2ZpbGVJZFRvVXNlID0gcHJvZmlsZUlkIHx8IChhdXRoQ29udGV4dD8uZGVmYXVsdFByb2ZpbGUgYXMgc3RyaW5nKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVJZFRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlSWRUb1VzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2ZpbGUgSWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlKHByb2ZpbGVJZFRvVXNlKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGVJZFRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2ZpbGU6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBHZXQgcHJvZmlsZXNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxQcm9maWxlW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcHJvZmlsZXMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcblxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZXMpXG4gKlxuICogW1Byb2ZpbGUgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Byb2ZpbGUubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlcyh7XG4gIHF1ZXJ5LFxufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlW10+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J3Byb2ZpbGVzJywgUHJvZmlsZVtdPiB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGVzLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGVzKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcHJvZmlsZXM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBHZXQgdG9rZW5zXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8VG9rZW5bXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICB0b2tlbnMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Rva2VucylcbiAqXG4gKiBbVG9rZW4gaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Rva2VuLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKHtcbiAgcXVlcnksXG59OiB7IHF1ZXJ5PzogUXVlcnlPcHRpb25zPFRva2VuW10+IH0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCd0b2tlbnMnLCBUb2tlbltdPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRUb2tlbnMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0VG9rZW5zKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgYmFsYW5jZXNcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPn0gW3BhcmFtcy5wcm9maWxlSWRdIEZldGNoIGJhbGFuY2VzIGZvciBhIHNwZWNpZmljIHByb2ZpbGUuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBiYWxhbmNlcywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQmFsYW5jZXMoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZS1iYWxhbmNlcylcbiAqXG4gKiBbQmFsYW5jZXMgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0JhbGFuY2VzLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQmFsYW5jZXMoe1xuICBwcm9maWxlSWQsXG4gIHF1ZXJ5LFxufToge1xuICBwcm9maWxlSWQ/OiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPEJhbGFuY2VzW10+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J2JhbGFuY2VzJywgQmFsYW5jZXNbXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhwcm9maWxlSWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEJhbGFuY2VzKHByb2ZpbGVJZCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgYmFsYW5jZXM6IGRhdGEsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiAjIEdldCBzaW5nbGUgb3JkZXJcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcy5vcmRlcklkIFRoZSBpZCBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxPcmRlcj59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG9yZGVyLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcilcbiAqXG4gKiBbT3JkZXIgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL09yZGVyLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXIoe1xuICBvcmRlcklkLFxuICBxdWVyeSA9IHt9LFxufToge1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyPjtcbn0pOiBRdWVyeVJlc3VsdDwnb3JkZXInLCBPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXIob3JkZXJJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3JkZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09yZGVyIGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXIob3JkZXJJZCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgb3JkZXJJZCAmJiAocXVlcnkuZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9yZGVyOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgb3JkZXJzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxPcmRlcltdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG9yZGVycywgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXJzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycylcbiAqXG4gKiBbT3JkZXIgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL09yZGVyLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcltdPjtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdHhIYXNoPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG59ID0ge30pOiBRdWVyeVJlc3VsdDwnb3JkZXJzJywgT3JkZXJbXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXJzKGZpbHRlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgb3JkZXJzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBQbGFjZSBhbiBvcmRlci5cbiAqIFdoZW4gdGhlIG9yZGVyIGhhcyBiZWVuIHBsYWNlZCwgdGhlIG9yZGVycyBxdWVyeSB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCByZS1mZXRjaGVkLlxuICpcbiAqIElmIHRoZSBvcmRlciBhbW91bnQgaXMgYWJvdmUgMTUwMDAsIGEgc3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZC5cbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge0ZpbGV9IHBhcmFtLnN1cHBvcnRpbmdEb2N1bWVudCBTdXBwb3J0aW5nIGRvY3VtZW50IGZpbGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubXV0YXRpb24ge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHBsYWNlT3JkZXIsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVBsYWNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnMpXG4gKlxuICogW05ld09yZGVyIHR5cGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL3R5cGUtYWxpYXNlcy9OZXdPcmRlci5tZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGxhY2VPcmRlcih7XG4gIHN1cHBvcnRpbmdEb2N1bWVudCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHN1cHBvcnRpbmdEb2N1bWVudD86IEZpbGU7XG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGxhY2VPcmRlcjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBBZGQgYWRkcmVzcyB0byBwcm9maWxlLlxuICogV2hlbiB0aGUgYWRkcmVzcyBoYXMgYmVlbiBsaW5rZWQsIHRoZSByZWxldmFudCBwcm9maWxlIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0gcGFyYW1cbiAqIEBwYXJhbSB7RmlsZX0gcGFyYW0ucHJvZmlsZUlkIFdoaWNoIHByb2ZpbGUgdG8gbGluayB0aGUgYWRkcmVzcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbS5tdXRhdGlvbiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUtYWRkcmVzc2VzKVxuICpcbiAqIFtMaW5rQWRkcmVzcyBpbnRlcmZhY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb25lcml1bS9qcy1tb25vcmVwby9ibG9iL21haW4vcGFja2FnZXMvc2RrL2RvY3MvZ2VuZXJhdGVkL2ludGVyZmFjZXMvTGlua0FkZHJlc3MubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIHByb2ZpbGVJZCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHByb2ZpbGVJZDogc3RyaW5nO1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+O1xufSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKHByb2ZpbGVJZCwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlSWQpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsaW5rQWRkcmVzczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbiJdfQ==
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJsIiwicmVkaXJlY3RVcmkiLCJlbnZpcm9ubWVudCIsInF1ZXJ5Q2xpZW50IiwidXNlUXVlcnlDbGllbnQiLCJzZGsiLCJzZXRTZGsiLCJ1c2VTdGF0ZSIsImlzQXV0aG9yaXplZCIsInNldElzQXV0aG9yaXplZCIsImVycm9yIiwic2V0RXJyb3IiLCJsb2FkaW5nQXV0aCIsInNldExvYWRpbmdBdXRoIiwidXNlRWZmZWN0Iiwic2RrSW5zdGFuY2UiLCJNb25lcml1bUNsaWVudCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwicmV2b2tlQWNjZXNzIiwianN4Iiwia2V5cyIsInByb2ZpbGVJZCIsIm9yZGVySWQiLCJmaWx0ZXIiLCJ1c2VTZGsiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsInVzZUF1dGgiLCJ1c2VBdXRoQ29udGV4dCIsInF1ZXJ5IiwiZGF0YSIsInJlc3QiLCJ1c2VRdWVyeSIsInVzZVByb2ZpbGUiLCJhdXRoQ29udGV4dCIsInByb2ZpbGVJZFRvVXNlIiwidXNlUHJvZmlsZXMiLCJ1c2VUb2tlbnMiLCJ1c2VCYWxhbmNlcyIsInVzZU9yZGVyIiwidXNlT3JkZXJzIiwiZmlsdGVycyIsInVzZVBsYWNlT3JkZXIiLCJzdXBwb3J0aW5nRG9jdW1lbnQiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwidXNlTXV0YXRpb24iLCJib2R5IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ2YXJpYWJsZXMiLCJ2YXJzIiwidXNlTGlua0FkZHJlc3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBSU8sSUFBTUEsQ0FBa0JDLENBQUFB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LENBQzVCLFFBQVVvQixDQUFBQSxDQUFBQSxDQUFLLFVBQVdDLENBQUFBLENBQVMsQ0FDckMsQ0FBQyxFQUVEdUIsQ0FBVSxFQUFBLFNBQUEsR0FBWWQsQ0FBTW9CLENBQUFBLENBQUFBLENBQVd6QixDQUFPLEVBQ2hELENBQUEsQ0FDQSxPQUFRbEIsQ0FBQUEsQ0FBQUEsQ0FBTzRDLEVBQU0xQixDQUFTLENBQUEsQ0FFNUIsTUFBQW1CLENBQUFBLEVBQVUsT0FBVXJDLEdBQUFBLENBQUFBLENBQU80QyxDQUFNMUIsQ0FBQUEsQ0FBTyxFQUNsQ2xCLENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsV0FBQSxDQUFhc0MsQ0FDYixDQUFBLEdBQUdkLENBQ0wsQ0FDRiIsImZpbGUiOiJpbmRleC5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZGtJbnN0YW5jZSwgVXNlQXV0aFJldHVybiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgKFVzZUF1dGhSZXR1cm4gJiBTZGtJbnN0YW5jZSkgfCBudWxsXG4+KG51bGwpO1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IHsgTW9uZXJpdW1DbGllbnQgfSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IEF1dGhvcml6ZVBhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFBsYWNlIHRoaXMgcHJvdmlkZXIgYXQgdGhlIHJvb3Qgb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAqIEBncm91cCBQcm92aWRlclxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5jaGlsZHJlbiAtIFJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHBhcmFtcy5jbGllbnRJZCAtIE1vbmVyaXVtIGF1dGggZmxvdyBjbGllbnQgaWQuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZGlyZWN0VXJpIC0gTW9uZXJpdW0gYXV0aCBmbG93IHJlZGlyZWN0IHVybC5cbiAqIEBwYXJhbSBwYXJhbXMuZW52aXJvbm1lbnQgLSBNb25lcml1bSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBNb25lcml1bVByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsaWVudElkLFxuICByZWRpcmVjdFVybCxcbiAgcmVkaXJlY3RVcmksXG4gIGVudmlyb25tZW50ID0gJ3NhbmRib3gnLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICByZWRpcmVjdFVyaTogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHJlZGlyZWN0VXJpICovXG4gIHJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86ICdzYW5kYm94JyB8ICdwcm9kdWN0aW9uJztcbn0pID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IFtzZGssIHNldFNka10gPSB1c2VTdGF0ZTxNb25lcml1bUNsaWVudD4oKTtcbiAgY29uc3QgW2lzQXV0aG9yaXplZCwgc2V0SXNBdXRob3JpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVua25vd24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmdBdXRoLCBzZXRMb2FkaW5nQXV0aF0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBTREtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZGtJbnN0YW5jZSA9IG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpOiByZWRpcmVjdFVyaSB8fCByZWRpcmVjdFVybCxcbiAgICB9KTtcbiAgICBzZXRTZGsoc2RrSW5zdGFuY2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtcz86IEF1dGhvcml6ZVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5hdXRob3JpemUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBhdXRob3JpemF0aW9uOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHJldm9rZUFjY2VzcyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBhd2FpdCBzZGsucmV2b2tlQWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmV2b2tpbmcgYWNjZXNzOicsIGVycik7XG4gICAgICBzZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyeUNsaWVudC5jbGVhcigpO1xuICAgICAgc2V0SXNBdXRob3JpemVkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8TW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBzZGssXG4gICAgICAgIGF1dGhvcml6ZSxcbiAgICAgICAgaXNBdXRob3JpemVkLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmdBdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZGlzY29ubmVjdDogYXN5bmMgKCkgPT4gc2RrPy5kaXNjb25uZWN0KCksXG4gICAgICAgIHJldm9rZUFjY2VzczogYXN5bmMgKCkgPT4gcmV2b2tlQWNjZXNzKCksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L01vbmVyaXVtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBdXRoQ29udGV4dCxcbiAgQmFsYW5jZXMsXG4gIExpbmtBZGRyZXNzLFxuICBMaW5rZWRBZGRyZXNzLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyU3RhdGUsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIE11dGF0aW9uT3B0aW9ucyxcbiAgTXV0YXRpb25SZXN1bHQsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlSZXN1bHQsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5c1xuICogKi9cbmV4cG9ydCBjb25zdCBrZXlzID0ge1xuICBnZXRBbGw6IFsnbW9uZXJpdW0nXSxcbiAgZ2V0QXV0aENvbnRleHQ6IFsnbW9uZXJpdW0nLCAnYXV0aC1jb250ZXh0J10sXG4gIGdldFByb2ZpbGU6IChwcm9maWxlSWQ6IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3Byb2ZpbGUnLFxuICAgIC4uLihwcm9maWxlSWQgPyBbcHJvZmlsZUlkXSA6IFtdKSxcbiAgXSxcbiAgZ2V0UHJvZmlsZXM6IFsnbW9uZXJpdW0nLCAncHJvZmlsZXMnXSxcbiAgZ2V0QmFsYW5jZXM6IChwcm9maWxlSWQ/OiBzdHJpbmcpID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgLi4uKHByb2ZpbGVJZCA/IFtwcm9maWxlSWRdIDogW10pLFxuICBdLFxuICBnZXRUb2tlbnM6IFsnbW9uZXJpdW0nLCAndG9rZW5zJ10sXG4gIGdldE9yZGVyOiAob3JkZXJJZDogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ29yZGVyJywgb3JkZXJJZF0sXG4gIGdldE9yZGVyczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdvcmRlcnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHsgYXV0aG9yaXplLCBpc0F1dGhvcml6ZWQsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZUF1dGgoKTtcbiAqXG4gKiBhdXRob3JpemUoKTsgLy8gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKlxuICogLy8gVG8gb3B0LWluIHRvIGF1dG9tYXRlZCB3YWxsZXQgbGlua2luZywgcGFzcyB0aGUgYWRkcmVzcywgc2lnbmF0dXJlIGFuZCBjaGFpbi5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBpc0F1dGhvcml6ZWRgIC0gV2hldGhlciB0aGUgdXNlciBpcyBhdXRob3JpemVkLlxuICogLSBgaXNMb2FkaW5nYCAtIFdoZXRoZXIgdGhlIGF1dGggZmxvdyBpcyBsb2FkaW5nLlxuICogLSBgZXJyb3JgIC0gRXJyb3IgbWVzc2FnZSBpZiB0aGUgYXV0aCBmbG93IGZhaWxzLlxuICogLSBgZGlzY29ubmVjdGAgLSBEaXNjb25uZWN0IHRoZSB1c2VyLlxuICogLSBgcmV2b2tlQWNjZXNzYCAtIFJldm9rZSB0aGUgdXNlcidzIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGgoKTogVXNlQXV0aFJldHVybiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBpc0xvYWRpbmc6IGNvbnRleHQuaXNMb2FkaW5nLFxuICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgIGRpc2Nvbm5lY3Q6IGNvbnRleHQuZGlzY29ubmVjdCxcbiAgICByZXZva2VBY2Nlc3M6IGNvbnRleHQucmV2b2tlQWNjZXNzLFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IHRoZSBhdXRoZW50aWNhdGlvbiBjb250ZXh0LlxuICogQGdyb3VwIEhvb2tzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxBdXRoQ29udGV4dD59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBhdXRoQ29udGV4dCwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQXV0aENvbnRleHQoKTtcbiAqIGBgYFxuICpcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL2F1dGgtY29udGV4dClcbiAqXG4gKiBbQXV0aENvbnRleHQgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0F1dGhDb250ZXh0Lm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aENvbnRleHQoe1xuICBxdWVyeSxcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QXV0aENvbnRleHQ+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J2F1dGhDb250ZXh0JywgQXV0aENvbnRleHQ+IHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QXV0aENvbnRleHQsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBhdXRoQ29udGV4dDogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IHNpbmdsZSBwcm9maWxlXG4gKiBJZiBubyBgcHJvZmlsZUlkYCBpcyBwcm92aWRlZCwgdGhlIGRlZmF1bHQgcHJvZmlsZSBpcyB1c2VkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wcm9maWxlSWRdIFRoZSBpZCBvZiB0aGUgcHJvZmlsZS5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPFByb2ZpbGU+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcHJvZmlsZSwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlUHJvZmlsZSgpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUpXG4gKlxuICogW1Byb2ZpbGUgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Byb2ZpbGUubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlKHtcbiAgcHJvZmlsZUlkLFxuICBxdWVyeSxcbn06IHtcbiAgcHJvZmlsZUlkPzogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdwcm9maWxlJywgUHJvZmlsZT4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBhdXRoQ29udGV4dCB9ID0gdXNlQXV0aENvbnRleHQoKTtcblxuICBjb25zdCBwcm9maWxlSWRUb1VzZSA9IHByb2ZpbGVJZCB8fCAoYXV0aENvbnRleHQ/LmRlZmF1bHRQcm9maWxlIGFzIHN0cmluZyk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlSWRUb1VzZSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJvZmlsZUlkVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlSWRUb1VzZSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKFxuICAgICAgc2RrICYmIGlzQXV0aG9yaXplZCAmJiBwcm9maWxlSWRUb1VzZSAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgR2V0IHByb2ZpbGVzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8UHJvZmlsZVtdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHByb2ZpbGVzLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlcygpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGVzKVxuICpcbiAqIFtQcm9maWxlIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9Qcm9maWxlLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZVtdPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdwcm9maWxlcycsIFByb2ZpbGVbXT4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlcyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlcygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2ZpbGVzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgR2V0IHRva2Vuc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPFRva2VuW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgdG9rZW5zLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VUb2tlbnMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMpXG4gKlxuICogW1Rva2VuIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9Ub2tlbi5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufTogeyBxdWVyeT86IFF1ZXJ5T3B0aW9uczxUb2tlbltdPiB9ID0ge30pOiBRdWVyeVJlc3VsdDwndG9rZW5zJywgVG9rZW5bXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IGJhbGFuY2VzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXNbXT59IFtwYXJhbXMucHJvZmlsZUlkXSBGZXRjaCBiYWxhbmNlcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXNbXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgYmFsYW5jZXMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUJhbGFuY2VzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUtYmFsYW5jZXMpXG4gKlxuICogW0JhbGFuY2VzIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9CYWxhbmNlcy5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgcHJvZmlsZUlkLFxuICBxdWVyeSxcbn06IHtcbiAgcHJvZmlsZUlkPzogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdiYWxhbmNlcycsIEJhbGFuY2VzW10+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMocHJvZmlsZUlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhwcm9maWxlSWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGJhbGFuY2VzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgc2luZ2xlIG9yZGVyXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMub3JkZXJJZCBUaGUgaWQgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8T3JkZXI+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBvcmRlciwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vb3JkZXIpXG4gKlxuICogW09yZGVyIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9PcmRlci5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgb3JkZXJJZDogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KTogUXVlcnlSZXN1bHQ8J29yZGVyJywgT3JkZXI+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBvcmRlcjogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IG9yZGVyc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmFkZHJlc3NdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5tZW1vXSBGaWx0ZXIgYnkgdGhlIHBheW1lbnQgbWVtby9yZWZlcmVuY2UuLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy50eEhhc2hdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiB0cmFuc2FjdGlvbiBoYXNoLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8T3JkZXJbXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBvcmRlcnMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVycygpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnMpXG4gKlxuICogW09yZGVyIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9PcmRlci5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVycyh7XG4gIHF1ZXJ5ID0ge30sXG4gIC4uLmZpbHRlcnNcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJbXT47XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHR4SGFzaD86IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgc3RhdGU/OiBPcmRlclN0YXRlO1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J29yZGVycycsIE9yZGVyW10+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVycyhmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVycyhmaWx0ZXJzKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnkuZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9yZGVyczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgUGxhY2UgYW4gb3JkZXIuXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtLm11dGF0aW9uIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwbGFjZU9yZGVyLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VQbGFjZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Bvc3Qtb3JkZXJzKVxuICpcbiAqIFtOZXdPcmRlciB0eXBlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC90eXBlLWFsaWFzZXMvTmV3T3JkZXIubWQpXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBsYWNlT3JkZXIoe1xuICBzdXBwb3J0aW5nRG9jdW1lbnQsXG4gIG11dGF0aW9uLFxufToge1xuICBzdXBwb3J0aW5nRG9jdW1lbnQ/OiBGaWxlO1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxPcmRlciwgRXJyb3IsIE5ld09yZGVyPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdwbGFjZU9yZGVyJywgT3JkZXIsIEVycm9yLCBOZXdPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5wbGFjZU9yZGVyLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBOZXdPcmRlcikgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBkb2N1bWVudElkO1xuICAgICAgaWYgKHBhcnNlSW50KGJvZHkuYW1vdW50KSA+IDE1MDAwKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGluZ0RvY3VtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQgZm9yIG9yZGVycyBhYm92ZSAxNTAwMCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgIGF3YWl0IHNkay51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgZG9jdW1lbnRJZCA9IHVwbG9hZGVkRG9jdW1lbnQuaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0JvZHkgPSB7XG4gICAgICAgIC4uLmJvZHksXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2RrLnBsYWNlT3JkZXIobmV3Qm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHBsYWNlT3JkZXI6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgQWRkIGFkZHJlc3MgdG8gcHJvZmlsZS5cbiAqIFdoZW4gdGhlIGFkZHJlc3MgaGFzIGJlZW4gbGlua2VkLCB0aGUgcmVsZXZhbnQgcHJvZmlsZSBxdWVyeSB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCByZS1mZXRjaGVkLlxuICpcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge0ZpbGV9IHBhcmFtLnByb2ZpbGVJZCBXaGljaCBwcm9maWxlIHRvIGxpbmsgdGhlIGFkZHJlc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubXV0YXRpb24ge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGxpbmtBZGRyZXNzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VMaW5rQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcylcbiAqXG4gKiBbTGlua0FkZHJlc3MgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0xpbmtBZGRyZXNzLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlua0FkZHJlc3Moe1xuICBwcm9maWxlSWQsXG4gIG11dGF0aW9uLFxufToge1xuICBwcm9maWxlSWQ6IHN0cmluZztcbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0pOiBNdXRhdGlvblJlc3VsdDwnbGlua0FkZHJlc3MnLCBMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubGlua0FkZHJlc3MsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IExpbmtBZGRyZXNzKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5saW5rQWRkcmVzcyhwcm9maWxlSWQsIGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZUlkKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbGlua0FkZHJlc3M6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monerium/sdk-react-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "React provider for the Monerium SDK.",
|
|
6
6
|
"repository": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsup",
|
|
46
|
-
"dev": "tsup --watch --onSuccess 'pnpm type-map'",
|
|
46
|
+
"dev": "tsup --watch --onSuccess 'pnpm type-map & pnpm run docs'",
|
|
47
47
|
"docs": "typedoc",
|
|
48
48
|
"docs:watch": "typedoc --watch",
|
|
49
49
|
"lint": "eslint . --fix",
|