cdk-nextjs-standalone
Version:
Deploy a NextJS app to AWS using CDK and OpenNext.
211 lines • 24.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const sign_fn_url_1 = require("./sign-fn-url");
describe('LambdaOriginRequestIamAuth', () => {
test('signRequest should add x-amz headers', async () => {
// dummy AWS credentials
process.env = { ...process.env, ...getFakeAwsCreds() };
const event = getFakePageRequest();
const request = event.Records[0].cf.request;
await (0, sign_fn_url_1.signRequest)(request);
const securityHeaders = [
'x-amz-date',
'x-amz-security-token',
'x-amz-content-sha256',
'authorization',
'origin-authorization',
];
const hasSignedHeaders = securityHeaders.every((h) => h in request.headers);
expect(hasSignedHeaders).toBe(true);
});
test('getRegionFromLambdaUrl should correctly get region', () => {
const event = getFakePageRequest();
const request = event.Records[0].cf.request;
const actual = (0, sign_fn_url_1.getRegionFromLambdaUrl)(request.origin?.custom?.domainName || '');
expect(actual).toBe('us-east-1');
});
});
function getFakePageRequest() {
return {
Records: [
{
cf: {
config: {
distributionDomainName: 'd6b8brjqfujeb.cloudfront.net',
distributionId: 'EHX2SDUU61T7U',
eventType: 'origin-request',
requestId: '',
},
request: {
clientIp: '1.1.1.1',
headers: {
authorization: [
{
key: 'Authorization',
value: 'Bearer token',
},
],
host: [
{
key: 'Host',
value: 'd6b8brjqfujeb.cloudfront.net',
},
],
'accept-language': [
{
key: 'Accept-Language',
value: 'en-US,en;q=0.9',
},
],
referer: [
{
key: 'Referer',
value: 'https://d6b8brjqfujeb.cloudfront.net/some/path',
},
],
'x-forwarded-for': [
{
key: 'X-Forwarded-For',
value: '1.1.1.1',
},
],
'user-agent': [
{
key: 'User-Agent',
value: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
},
],
via: [
{
key: 'Via',
value: '2.0 8bf94e29f889f8d0076c4502ae008b58.cloudfront.net (CloudFront)',
},
],
'accept-encoding': [
{
key: 'Accept-Encoding',
value: 'br,gzip',
},
],
'sec-ch-ua': [
{
key: 'sec-ch-ua',
value: '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
},
],
},
method: 'GET',
querystring: '',
uri: '/some/path',
origin: {
custom: {
customHeaders: {},
domainName: 'kjtbbx7u533q7p7n5font6gpci0phrng.lambda-url.us-east-1.on.aws',
keepaliveTimeout: 5,
path: '',
port: 443,
protocol: 'https',
readTimeout: 30,
sslProtocols: ['TLSv1.2'],
},
},
body: {
action: 'read-only',
data: '',
encoding: 'base64',
inputTruncated: false,
},
},
},
},
],
};
}
function getFakeAwsCreds() {
return {
AWS_REGION: 'us-east-1',
AWS_ACCESS_KEY_ID: 'ZSBAT5GENDHC3XYRH36I',
AWS_SECRET_ACCESS_KEY: 'jpWfApw1AO0xzGZeeT1byQq1zqfQITVqVhTkkql4',
AWS_SESSION_TOKEN: 'ZQoJb3JpZ2luX2VjEFgaCXVzLWVhc3QtMSJGMEQCIHijzdTXh59aSe2hRfCWpFd2/jacPUC+8rCq3qBIiuG2AiAGX8jqld+p04nPYfuShi1lLN/Z1hEXG9QSNEmEFLTxGSqmAgiR//////////8BEAIaDDI2ODkxNDQ2NTIzMSIMrAMO5/GTvMgoG+chKvoB4f4V1TfkZiHOlmeMK6Ep58mav65A0WU3K9WPzdrJojnGqqTuS85zTlKhm3lfmMxCOtwS/OlOuiBQ1MZNlksK2je1FazgbXN46fNSi+iHiY9VfyRAd0wSLmXB8FFrCGsU92QOy/+deji0qIVadsjEyvBRxzQj5oIUI5sb74Yt7uNvka9fVZcT4s4IndYda0N7oZwIrApCuzzBMuoMAhabmgVrZTbiLmvOiFHS2XZWBySABdygqaIzfV7G4hjckvcXhtxpkw+HJUZTNzVUlspghzte1UG6VvIRV8ax3kWA3zqm8nA/1gHkl40DubJIXz1AJbg5Cps5moE1pjD7vNijBjqeAZh0Q/e0awIHnV4dXMfXUu5mWJ7Db9K1eUlSSL9FyiKeKd94HEdrbIrnPuIWVT/I/5RjNm7NgPYiqmpyx3fSpVcq9CKws0oEfBw6J9Hxk0IhV8yWFZYNMWIarUUZdmL9vVeJmFZmwyL4JjY1s/SZIU/oa8DtvkmP4RG4tTJfpyyhoKL0wJOevkYyoigNllBlLN59SZAT8CCADpN/B+sK',
};
}
// function getFakeImageEvent(): CloudFrontRequestEvent {
// return {
// Records: [
// {
// cf: {
// config: {
// distributionDomainName: 'd6b8brjqfujeb.cloudfront.net',
// distributionId: 'EHX2SDUU61T7U',
// eventType: 'origin-request',
// requestId: '',
// },
// request: {
// body: {
// action: 'read-only',
// data: '',
// encoding: 'base64',
// inputTruncated: false,
// },
// clientIp: '35.148.139.0',
// headers: {
// accept: [
// {
// key: 'Accept',
// value:
// 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
// },
// ],
// 'x-forwarded-for': [
// {
// key: 'X-Forwarded-For',
// value: '35.148.139.0',
// },
// ],
// 'user-agent': [
// {
// key: 'User-Agent',
// value: 'Amazon CloudFront',
// },
// ],
// via: [
// {
// key: 'Via',
// value: '2.0 56233ac1c78ee7b920e664cc0c7f287e.cloudfront.net (CloudFront)',
// },
// ],
// 'accept-encoding': [
// {
// key: 'Accept-Encoding',
// value: 'br,gzip',
// },
// ],
// host: [
// {
// key: 'Host',
// value: 'lqlihcxizzcsefhpfcx2rnkgnu0pzrar.lambda-url.us-east-1.on.aws',
// },
// ],
// },
// method: 'GET',
// origin: {
// custom: {
// customHeaders: {},
// domainName: 'lqlihcxizzcsefhpfcx2rnkgnu0pzrar.lambda-url.us-east-1.on.aws',
// keepaliveTimeout: 5,
// path: '',
// port: 443,
// protocol: 'https',
// readTimeout: 30,
// sslProtocols: ['TLSv1.2'],
// },
// },
// querystring: 'url=%2Fprince-akachi-LWkFHEGpleE-unsplash.jpg&w=96&q=75&badParam=bad',
// uri: '/_next/image',
// },
// },
// },
// ],
// };
// }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1mbi11cmwudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGFzL3NpZ24tZm4tdXJsLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwrQ0FBb0U7QUFFcEUsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUMxQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEQsd0JBQXdCO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzVDLE1BQU0sSUFBQSx5QkFBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLFlBQVk7WUFDWixzQkFBc0I7WUFDdEIsc0JBQXNCO1lBQ3RCLGVBQWU7WUFDZixzQkFBc0I7U0FDdkIsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFD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ZixhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1AsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xvdWRGcm9udFJlcXVlc3RFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgZ2V0UmVnaW9uRnJvbUxhbWJkYVVybCwgc2lnblJlcXVlc3QgfSBmcm9tICcuL3NpZ24tZm4tdXJsJztcblxuZGVzY3JpYmUoJ0xhbWJkYU9yaWdpblJlcXVlc3RJYW1BdXRoJywgKCkgPT4ge1xuICB0ZXN0KCdzaWduUmVxdWVzdCBzaG91bGQgYWRkIHgtYW16IGhlYWRlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gZHVtbXkgQVdTIGNyZWRlbnRpYWxzXG4gICAgcHJvY2Vzcy5lbnYgPSB7IC4uLnByb2Nlc3MuZW52LCAuLi5nZXRGYWtlQXdzQ3JlZHMoKSB9O1xuICAgIGNvbnN0IGV2ZW50ID0gZ2V0RmFrZVBhZ2VSZXF1ZXN0KCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGV2ZW50LlJlY29yZHNbMF0uY2YucmVxdWVzdDtcbiAgICBhd2FpdCBzaWduUmVxdWVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBzZWN1cml0eUhlYWRlcnMgPSBbXG4gICAgICAneC1hbXotZGF0ZScsXG4gICAgICAneC1hbXotc2VjdXJpdHktdG9rZW4nLFxuICAgICAgJ3gtYW16LWNvbnRlbnQtc2hhMjU2JyxcbiAgICAgICdhdXRob3JpemF0aW9uJyxcbiAgICAgICdvcmlnaW4tYXV0aG9yaXphdGlvbicsXG4gICAgXTtcbiAgICBjb25zdCBoYXNTaWduZWRIZWFkZXJzID0gc2VjdXJpdHlIZWFkZXJzLmV2ZXJ5KChoKSA9PiBoIGluIHJlcXVlc3QuaGVhZGVycyk7XG4gICAgZXhwZWN0KGhhc1NpZ25lZEhlYWRlcnMpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2dldFJlZ2lvbkZyb21MYW1iZGFVcmwgc2hvdWxkIGNvcnJlY3RseSBnZXQgcmVnaW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZ2V0RmFrZVBhZ2VSZXF1ZXN0KCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGV2ZW50LlJlY29yZHNbMF0uY2YucmVxdWVzdDtcbiAgICBjb25zdCBhY3R1YWwgPSBnZXRSZWdpb25Gcm9tTGFtYmRhVXJsKHJlcXVlc3Qub3JpZ2luPy5jdXN0b20/LmRvbWFpbk5hbWUgfHwgJycpO1xuICAgIGV4cGVjdChhY3R1YWwpLnRvQmUoJ3VzLWVhc3QtMScpO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRGYWtlUGFnZVJlcXVlc3QoKTogQ2xvdWRGcm9udFJlcXVlc3RFdmVudCB7XG4gIHJldHVybiB7XG4gICAgUmVjb3JkczogW1xuICAgICAge1xuICAgICAgICBjZjoge1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgZGlzdHJpYnV0aW9uRG9tYWluTmFtZTogJ2Q2YjhicmpxZnVqZWIuY2xvdWRmcm9udC5uZXQnLFxuICAgICAgICAgICAgZGlzdHJpYnV0aW9uSWQ6ICdFSFgyU0RVVTYxVDdVJyxcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ29yaWdpbi1yZXF1ZXN0JyxcbiAgICAgICAgICAgIHJlcXVlc3RJZDogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICBjbGllbnRJcDogJzEuMS4xLjEnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnQXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJ0JlYXJlciB0b2tlbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgaG9zdDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ0hvc3QnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6ICdkNmI4YnJqcWZ1amViLmNsb3VkZnJvbnQubmV0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAnYWNjZXB0LWxhbmd1YWdlJzogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ0FjY2VwdC1MYW5ndWFnZScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJ2VuLVVTLGVuO3E9MC45JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWZlcmVyOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnUmVmZXJlcicsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJ2h0dHBzOi8vZDZiOGJyanFmdWplYi5jbG91ZGZyb250Lm5ldC9zb21lL3BhdGgnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICd4LWZvcndhcmRlZC1mb3InOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnWC1Gb3J3YXJkZWQtRm9yJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMS4xLjEuMScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgJ3VzZXItYWdlbnQnOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnVXNlci1BZ2VudCcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC4wLjAgU2FmYXJpLzUzNy4zNicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdmlhOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiAnVmlhJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMi4wIDhiZjk0ZTI5Zjg4OWY4ZDAwNzZjNDUwMmFlMDA4YjU4LmNsb3VkZnJvbnQubmV0IChDbG91ZEZyb250KScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgJ2FjY2VwdC1lbmNvZGluZyc6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6ICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6ICdicixnemlwJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAnc2VjLWNoLXVhJzogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogJ3NlYy1jaC11YScsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogJ1wiR29vZ2xlIENocm9tZVwiO3Y9XCIxMTNcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMTNcIiwgXCJOb3QtQS5CcmFuZFwiO3Y9XCIyNFwiJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICBxdWVyeXN0cmluZzogJycsXG4gICAgICAgICAgICB1cmk6ICcvc29tZS9wYXRoJyxcbiAgICAgICAgICAgIG9yaWdpbjoge1xuICAgICAgICAgICAgICBjdXN0b206IHtcbiAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBkb21haW5OYW1lOiAna2p0YmJ4N3U1MzNxN3A3bjVmb250NmdwY2kwcGhybmcubGFtYmRhLXVybC51cy1lYXN0LTEub24uYXdzJyxcbiAgICAgICAgICAgICAgICBrZWVwYWxpdmVUaW1lb3V0OiA1LFxuICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgICBwcm90b2NvbDogJ2h0dHBzJyxcbiAgICAgICAgICAgICAgICByZWFkVGltZW91dDogMzAsXG4gICAgICAgICAgICAgICAgc3NsUHJvdG9jb2xzOiBbJ1RMU3YxLjInXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgIGFjdGlvbjogJ3JlYWQtb25seScsXG4gICAgICAgICAgICAgIGRhdGE6ICcnLFxuICAgICAgICAgICAgICBlbmNvZGluZzogJ2Jhc2U2NCcsXG4gICAgICAgICAgICAgIGlucHV0VHJ1bmNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RmFrZUF3c0NyZWRzKCkge1xuICByZXR1cm4ge1xuICAgIEFXU19SRUdJT046ICd1cy1lYXN0LTEnLFxuICAgIEFXU19BQ0NFU1NfS0VZX0lEOiAnWlNCQVQ1R0VOREhDM1hZUkgzNkknLFxuICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJ2pwV2ZBcHcxQU8weHpHWmVlVDFieVFxMXpxZlFJVFZxVmhUa2txbDQnLFxuICAgIEFXU19TRVNTSU9OX1RPS0VOOlxuICAgICAgJ1pRb0piM0pwWjJsdVgyVmpFRmdhQ1hWekxXVmhjM1F0TVNKR01FUUNJSGlqemRUWGg1OWFTZTJoUmZDV3BGZDIvamFjUFVDKzhyQ3EzcUJJaXVHMkFpQUdYOGpxbGQrcDA0blBZZnVTaGkxbExOL1oxaEVYRzlRU05FbUVGTFR4R1NxbUFnaVIvLy8vLy8vLy8vOEJFQUlhRERJMk9Ea3hORFEyTlRJek1TSU1yQU1PNS9HVHZNZ29HK2NoS3ZvQjRmNFYxVGZrWmlIT2xtZU1LNkVwNThtYXY2NUEwV1UzSzlXUHpkckpvam5HcXFUdVM4NXpUbEtobTNsZm1NeENPdHdTL09sT3VpQlExTVpObGtzSzJqZTFGYXpnYlhONDZmTlNpK2lIaVk5VmZ5UkFkMHdTTG1YQjhGRnJDR3NVOTJRT3kvK2RlamkwcUlWYWRzakV5dkJSeHpRajVvSVVJNXNiNzRZdDd1TnZrYTlmVlpjVDRzNEluZFlkYTBON29ad0lyQXBDdXp6Qk11b01BaGFibWdWclpUYmlMbXZPaUZIUzJYWldCeVNBQmR5Z3FhSXpmVjdHNGhqY2t2Y1hodHhwa3crSEpVWlROelZVbHNwZ2h6dGUxVUc2VnZJUlY4YXgza1dBM3pxbThuQS8xZ0hrbDQwRHViSklYejFBSmJnNUNwczVtb0UxcGpEN3ZOaWpCanFlQVpoMFEvZTBhd0lIblY0ZFhNZlhVdTVtV0o3RGI5SzFlVWxTU0w5RnlpS2VLZDk0SEVkcmJJcm5QdUlXVlQvSS81UmpObTdOZ1BZaXFtcHl4M2ZTcFZjcTlDS3dzMG9FZkJ3Nko5SHhrMEloVjh5V0ZaWU5NV0lhclVVWmRtTDl2VmVKbUZabXd5TDRKalkxcy9TWklVL29hOER0dmttUDRSRzR0VEpmcHl5aG9LTDB3Sk9ldmtZeW9pZ05sbEJsTE41OVNaQVQ4Q0NBRHBOL0Irc0snLFxuICB9O1xufVxuXG4vLyBmdW5jdGlvbiBnZXRGYWtlSW1hZ2VFdmVudCgpOiBDbG91ZEZyb250UmVxdWVzdEV2ZW50IHtcbi8vICAgcmV0dXJuIHtcbi8vICAgICBSZWNvcmRzOiBbXG4vLyAgICAgICB7XG4vLyAgICAgICAgIGNmOiB7XG4vLyAgICAgICAgICAgY29uZmlnOiB7XG4vLyAgICAgICAgICAgICBkaXN0cmlidXRpb25Eb21haW5OYW1lOiAnZDZiOGJyanFmdWplYi5jbG91ZGZyb250Lm5ldCcsXG4vLyAgICAgICAgICAgICBkaXN0cmlidXRpb25JZDogJ0VIWDJTRFVVNjFUN1UnLFxuLy8gICAgICAgICAgICAgZXZlbnRUeXBlOiAnb3JpZ2luLXJlcXVlc3QnLFxuLy8gICAgICAgICAgICAgcmVxdWVzdElkOiAnJyxcbi8vICAgICAgICAgICB9LFxuLy8gICAgICAgICAgIHJlcXVlc3Q6IHtcbi8vICAgICAgICAgICAgIGJvZHk6IHtcbi8vICAgICAgICAgICAgICAgYWN0aW9uOiAncmVhZC1vbmx5Jyxcbi8vICAgICAgICAgICAgICAgZGF0YTogJycsXG4vLyAgICAgICAgICAgICAgIGVuY29kaW5nOiAnYmFzZTY0Jyxcbi8vICAgICAgICAgICAgICAgaW5wdXRUcnVuY2F0ZWQ6IGZhbHNlLFxuLy8gICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgIGNsaWVudElwOiAnMzUuMTQ4LjEzOS4wJyxcbi8vICAgICAgICAgICAgIGhlYWRlcnM6IHtcbi8vICAgICAgICAgICAgICAgYWNjZXB0OiBbXG4vLyAgICAgICAgICAgICAgICAge1xuLy8gICAgICAgICAgICAgICAgICAga2V5OiAnQWNjZXB0Jyxcbi8vICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuLy8gICAgICAgICAgICAgICAgICAgICAndGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43Jyxcbi8vICAgICAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgICBdLFxuLy8gICAgICAgICAgICAgICAneC1mb3J3YXJkZWQtZm9yJzogW1xuLy8gICAgICAgICAgICAgICAgIHtcbi8vICAgICAgICAgICAgICAgICAgIGtleTogJ1gtRm9yd2FyZGVkLUZvcicsXG4vLyAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzM1LjE0OC4xMzkuMCcsXG4vLyAgICAgICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgICAgXSxcbi8vICAgICAgICAgICAgICAgJ3VzZXItYWdlbnQnOiBbXG4vLyAgICAgICAgICAgICAgICAge1xuLy8gICAgICAgICAgICAgICAgICAga2V5OiAnVXNlci1BZ2VudCcsXG4vLyAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ0FtYXpvbiBDbG91ZEZyb250Jyxcbi8vICAgICAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgICBdLFxuLy8gICAgICAgICAgICAgICB2aWE6IFtcbi8vICAgICAgICAgICAgICAgICB7XG4vLyAgICAgICAgICAgICAgICAgICBrZXk6ICdWaWEnLFxuLy8gICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyLjAgNTYyMzNhYzFjNzhlZTdiOTIwZTY2NGNjMGM3ZjI4N2UuY2xvdWRmcm9udC5uZXQgKENsb3VkRnJvbnQpJyxcbi8vICAgICAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgICBdLFxuLy8gICAgICAgICAgICAgICAnYWNjZXB0LWVuY29kaW5nJzogW1xuLy8gICAgICAgICAgICAgICAgIHtcbi8vICAgICAgICAgICAgICAgICAgIGtleTogJ0FjY2VwdC1FbmNvZGluZycsXG4vLyAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2JyLGd6aXAnLFxuLy8gICAgICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICAgIF0sXG4vLyAgICAgICAgICAgICAgIGhvc3Q6IFtcbi8vICAgICAgICAgICAgICAgICB7XG4vLyAgICAgICAgICAgICAgICAgICBrZXk6ICdIb3N0Jyxcbi8vICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnbHFsaWhjeGl6emNzZWZocGZjeDJybmtnbnUwcHpyYXIubGFtYmRhLXVybC51cy1lYXN0LTEub24uYXdzJyxcbi8vICAgICAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgICBdLFxuLy8gICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4vLyAgICAgICAgICAgICBvcmlnaW46IHtcbi8vICAgICAgICAgICAgICAgY3VzdG9tOiB7XG4vLyAgICAgICAgICAgICAgICAgY3VzdG9tSGVhZGVyczoge30sXG4vLyAgICAgICAgICAgICAgICAgZG9tYWluTmFtZTogJ2xxbGloY3hpenpjc2VmaHBmY3gycm5rZ251MHB6cmFyLmxhbWJkYS11cmwudXMtZWFzdC0xLm9uLmF3cycsXG4vLyAgICAgICAgICAgICAgICAga2VlcGFsaXZlVGltZW91dDogNSxcbi8vICAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbi8vICAgICAgICAgICAgICAgICBwb3J0OiA0NDMsXG4vLyAgICAgICAgICAgICAgICAgcHJvdG9jb2w6ICdodHRwcycsXG4vLyAgICAgICAgICAgICAgICAgcmVhZFRpbWVvdXQ6IDMwLFxuLy8gICAgICAgICAgICAgICAgIHNzbFByb3RvY29sczogWydUTFN2MS4yJ10sXG4vLyAgICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICB9LFxuLy8gICAgICAgICAgICAgcXVlcnlzdHJpbmc6ICd1cmw9JTJGcHJpbmNlLWFrYWNoaS1MV2tGSEVHcGxlRS11bnNwbGFzaC5qcGcmdz05NiZxPTc1JmJhZFBhcmFtPWJhZCcsXG4vLyAgICAgICAgICAgICB1cmk6ICcvX25leHQvaW1hZ2UnLFxuLy8gICAgICAgICAgIH0sXG4vLyAgICAgICAgIH0sXG4vLyAgICAgICB9LFxuLy8gICAgIF0sXG4vLyAgIH07XG4vLyB9XG4iXX0=