amazon-route-53-dns-zone-file
Version:
Makes DNS Zone File easy. Parses and validates BIND zone files and can be extended for custom features. Functionality is modular. Features are made open for extension and closed for runtime mutation. Written in TypeScript.
189 lines • 16.4 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
/** @perf use const enums */
export var DirectiveKind;
(function (DirectiveKind) {
DirectiveKind["Origin"] = "$ORIGIN";
DirectiveKind["TimeToLive"] = "$TTL";
})(DirectiveKind || (DirectiveKind = {}));
export var SUPPORTED_RECORD_TYPES = [
'TXT',
'NS',
'A',
'AAAA',
'CNAME',
'MX',
'PTR',
'SPF',
'SRV',
'CAA',
'NAPTR',
];
export var ALL_RECORD_TYPES = __spreadArray(['SOA'], __read(SUPPORTED_RECORD_TYPES));
/** @private */
export var INSTRUCTION_TYPES = __spreadArray(__spreadArray([], __read(SUPPORTED_RECORD_TYPES)), [
DirectiveKind.TimeToLive,
DirectiveKind.Origin,
]);
/** @perf const enum */
export var RecordMinLengthKind;
(function (RecordMinLengthKind) {
/**
* treemonkey1.ca. 3W IN TXT "v=DKIM1\; k=rsa\; p=MIGf..."
* TXT "eh=true"
*/
RecordMinLengthKind[RecordMinLengthKind["TXT"] = 1] = "TXT";
/**
* www 1h IN CNAME \\008\\99.igloo.com.
* CNAME igloo.igloo.com.
*/
RecordMinLengthKind[RecordMinLengthKind["CNAME"] = 1] = "CNAME";
/**
* eh 1w A 127.0.0.1
* eh A 127.0.0.1
* A 127.0.0.1
*/
RecordMinLengthKind[RecordMinLengthKind["A"] = 1] = "A";
/**
* eh 3W AAAA ::1
* @ AAAA ::1
*/
RecordMinLengthKind[RecordMinLengthKind["AAAA"] = 1] = "AAAA";
/**
* @ 1W NS ns.igloo.com.
* @ NS NS2.NAMESERVER.NET.
* 1W NS ns.igloo.com.
*/
RecordMinLengthKind[RecordMinLengthKind["NS"] = 1] = "NS";
/**
* 1 3W PTR HOST1.igloo.com.
* 10.3 PTR HOST3.igloo.com.
* @ PTR HOST3.igloo.com.
* PTR HOST3.igloo.com.
*/
RecordMinLengthKind[RecordMinLengthKind["PTR"] = 1] = "PTR";
/**
* igloo.com. MX 10 mail.igloo.com.
* MX 10 mail.igloo.com.
*/
RecordMinLengthKind[RecordMinLengthKind["MX"] = 2] = "MX";
/**
* test1 3w IN SPF "v=spf2" "mx:gcloud-node.com." "-all"
* SPF "v=spf3" "mx:gcloud-node.com." "-all "
* SPF "v=spf4" "mx:gcloud-node.com." "-all"
* SPF "v=spf4 mx:gcloud-node.com."
*/
RecordMinLengthKind[RecordMinLengthKind["SPF"] = 1] = "SPF";
/**
* igloo.com 3W CAA 0 iodef "mailto:security@igloo.com"
* CAA 0 iodef "mailto:security@igloo.com"
*/
RecordMinLengthKind[RecordMinLengthKind["CAA"] = 3] = "CAA";
/**
* _foobar._tcp SRV 0 1 9 old-slow-box.igloo.com.
* _foobar._tcp 1W SRV 0 1 9 old-slow-box.igloo.com.
*/
RecordMinLengthKind[RecordMinLengthKind["SRV"] = 4] = "SRV";
/**
* rfc3403-1 86400 IN NAPTR 100 10 "u" "sip+E2U" "!^.*$!sip:information@foo.se!i" .
* 69 42 "u" "sip" ".*" .
*/
RecordMinLengthKind[RecordMinLengthKind["NAPTR"] = 6] = "NAPTR";
/**
* or 6 | 7...
*/
RecordMinLengthKind[RecordMinLengthKind["SOA"] = 7] = "SOA";
})(RecordMinLengthKind || (RecordMinLengthKind = {}));
/** @perf const enum */
export var RecordMaxLengthKind;
(function (RecordMaxLengthKind) {
/**
* @example SPF v=spf1 ip:4:192.168.0.1/16-all
* @example SPF v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.123 a -all
*/
RecordMaxLengthKind[RecordMaxLengthKind["SPF"] = Infinity] = "SPF";
RecordMaxLengthKind[RecordMaxLengthKind["SOA"] = Infinity] = "SOA";
RecordMaxLengthKind[RecordMaxLengthKind["TXT"] = 1] = "TXT";
RecordMaxLengthKind[RecordMaxLengthKind["CNAME"] = 1] = "CNAME";
RecordMaxLengthKind[RecordMaxLengthKind["A"] = 1] = "A";
RecordMaxLengthKind[RecordMaxLengthKind["AAAA"] = 1] = "AAAA";
RecordMaxLengthKind[RecordMaxLengthKind["NS"] = 1] = "NS";
RecordMaxLengthKind[RecordMaxLengthKind["PTR"] = 1] = "PTR";
RecordMaxLengthKind[RecordMaxLengthKind["MX"] = 2] = "MX";
RecordMaxLengthKind[RecordMaxLengthKind["CAA"] = 3] = "CAA";
RecordMaxLengthKind[RecordMaxLengthKind["SRV"] = 4] = "SRV";
RecordMaxLengthKind[RecordMaxLengthKind["NAPTR"] = 6] = "NAPTR";
})(RecordMaxLengthKind || (RecordMaxLengthKind = {}));
/** @perf use numbers here in production & const enum */
export var ErrorKeyKind;
(function (ErrorKeyKind) {
// === special ===
/** api error, unused */
ErrorKeyKind["Api"] = "API";
/** nothing in the input */
ErrorKeyKind["EmptyInput"] = "EMPTY";
/** nothing to create */
ErrorKeyKind["NoRecords"] = "NO_RECORDS_TO_CREATE";
/** we have records, but none are valid */
ErrorKeyKind["NoValidRecords"] = "NO_VALID_RECORDS_TO_CREATE";
/** not standard */
ErrorKeyKind["BadDirective"] = "BAD_DIRECTIVE";
/** exists either in already created records or twice here */
ErrorKeyKind["Duplicated"] = "DUPLICATED";
/** unknown */
ErrorKeyKind["Unknown"] = "UNKNOWN";
/** fallback case */
ErrorKeyKind["Missing"] = "";
// === ttl ===
/** Invalid ttl format */
ErrorKeyKind["TtlInvalidFormat"] = "TTL_INVALID_FORMAT";
/** Value too large */
ErrorKeyKind["TtlOverflow"] = "TTL_OVERFLOW";
/** Invalid format & missing default value as a number */
ErrorKeyKind["TtlMissingDefault"] = "TTL_INVALID_FORMAT_MISSING_DEFAULT";
// === args ===
/** wrong number of args for this instruction */
ErrorKeyKind["WrongLength"] = "WRONG_LENGTH";
/** format of an instruction is wrong */
ErrorKeyKind["WrongNameArgsLength"] = "EXTRA_NAME_TTL_ARGS";
})(ErrorKeyKind || (ErrorKeyKind = {}));
export var ERROR_KEYS = [
ErrorKeyKind.Api,
ErrorKeyKind.EmptyInput,
ErrorKeyKind.NoRecords,
ErrorKeyKind.NoValidRecords,
ErrorKeyKind.BadDirective,
ErrorKeyKind.TtlInvalidFormat,
ErrorKeyKind.TtlOverflow,
ErrorKeyKind.TtlMissingDefault,
ErrorKeyKind.WrongLength,
ErrorKeyKind.WrongNameArgsLength,
ErrorKeyKind.Duplicated,
ErrorKeyKind.Unknown,
];
/** @idea move `warnings` to `errors` and make => `problems` + `severity` */
export var WarningKeyKind;
(function (WarningKeyKind) {
WarningKeyKind["NsIgnored"] = "SOA_IGNORED";
WarningKeyKind["SoaIgnored"] = "NS_IGNORED";
})(WarningKeyKind || (WarningKeyKind = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzX2RvbWFpbl9zcGVjaWZpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaGFyZWQvY29uc3RhbnRzX2RvbWFpbl9zcGVjaWZpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0QkFBNEI7QUFDNUIsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2QixtQ0FBa0IsQ0FBQTtJQUNsQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsYUFBYSxLQUFiLGFBQWEsUUFHeEI7QUFFRCxNQUFNLENBQUMsSUFBTSxzQkFBc0IsR0FBRztJQUNwQyxLQUFLO0lBQ0wsSUFBSTtJQUNKLEdBQUc7SUFDSCxNQUFNO0lBQ04sT0FBTztJQUNQLElBQUk7SUFDSixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsT0FBTztDQUNDLENBQUM7QUFFWCxNQUFNLENBQUMsSUFBTSxnQkFBZ0IsR0FBRyxlQUFDLEtBQUssVUFBSyxzQkFBc0IsRUFBVSxDQUFDO0FBRTVFLGVBQWU7QUFDZixNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBRyx1Q0FDNUIsc0JBQXNCO0lBQ3pCLGFBQWEsQ0FBQyxVQUFvQjtJQUNsQyxhQUFhLENBQUMsTUFBbUI7RUFDekIsQ0FBQztBQU1YLHVCQUF1QjtBQUN2QixNQUFNLENBQU4sSUFBWSxtQkE2RVg7QUE3RUQsV0FBWSxtQkFBbUI7SUFDN0I7OztPQUdHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILCtEQUFTLENBQUE7SUFFVDs7OztPQUlHO0lBQ0gsdURBQUssQ0FBQTtJQUVMOzs7T0FHRztJQUNILDZEQUFRLENBQUE7SUFFUjs7OztPQUlHO0lBQ0gseURBQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILHlEQUFNLENBQUE7SUFFTjs7Ozs7T0FLRztJQUNILDJEQUFPLENBQUE7SUFFUDs7O09BR0c7SUFDSCwyREFBTyxDQUFBO0lBRVA7OztPQUdHO0lBQ0gsMkRBQU8sQ0FBQTtJQUVQOzs7T0FHRztJQUNILCtEQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDJEQUFPLENBQUE7QUFDVCxDQUFDLEVBN0VXLG1CQUFtQixLQUFuQixtQkFBbUIsUUE2RTlCO0FBRUQsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBTixJQUFZLG1CQWlCWDtBQWpCRCxXQUFZLG1CQUFtQjtJQUM3Qjs7O09BR0c7SUFDSCxrRUFBYyxDQUFBO0lBQ2Qsa0VBQWMsQ0FBQTtJQUNkLDJEQUFPLENBQUE7SUFDUCwrREFBUyxDQUFBO0lBQ1QsdURBQUssQ0FBQTtJQUNMLDZEQUFRLENBQUE7SUFDUix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtJQUNQLHlEQUFNLENBQUE7SUFDTiwyREFBTyxDQUFBO0lBQ1AsMkRBQU8sQ0FBQTtJQUNQLCtEQUFTLENBQUE7QUFDWCxDQUFDLEVBakJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFpQjlCO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBTixJQUFZLFlBZ0NYO0FBaENELFdBQVksWUFBWTtJQUN0QixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDJCQUFXLENBQUE7SUFDWCwyQkFBMkI7SUFDM0Isb0NBQW9CLENBQUE7SUFDcEIsd0JBQXdCO0lBQ3hCLGtEQUFrQyxDQUFBO0lBQ2xDLDBDQUEwQztJQUMxQyw2REFBNkMsQ0FBQTtJQUM3QyxtQkFBbUI7SUFDbkIsOENBQThCLENBQUE7SUFDOUIsNkRBQTZEO0lBQzdELHlDQUF5QixDQUFBO0lBQ3pCLGNBQWM7SUFDZCxtQ0FBbUIsQ0FBQTtJQUNuQixvQkFBb0I7SUFDcEIsNEJBQVksQ0FBQTtJQUVaLGNBQWM7SUFDZCx5QkFBeUI7SUFDekIsdURBQXVDLENBQUE7SUFDdkMsc0JBQXNCO0lBQ3RCLDRDQUE0QixDQUFBO0lBQzVCLHlEQUF5RDtJQUN6RCx3RUFBd0QsQ0FBQTtJQUV4RCxlQUFlO0lBQ2YsZ0RBQWdEO0lBQ2hELDRDQUE0QixDQUFBO0lBQzVCLHdDQUF3QztJQUN4QywyREFBMkMsQ0FBQTtBQUM3QyxDQUFDLEVBaENXLFlBQVksS0FBWixZQUFZLFFBZ0N2QjtBQUVELE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBRztJQUN4QixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsVUFBVTtJQUN2QixZQUFZLENBQUMsU0FBUztJQUN0QixZQUFZLENBQUMsY0FBYztJQUMzQixZQUFZLENBQUMsWUFBWTtJQUN6QixZQUFZLENBQUMsZ0JBQWdCO0lBQzdCLFlBQVksQ0FBQyxXQUFXO0lBQ3hCLFlBQVksQ0FBQyxpQkFBaUI7SUFDOUIsWUFBWSxDQUFDLFdBQVc7SUFDeEIsWUFBWSxDQUFDLG1CQUFtQjtJQUNoQyxZQUFZLENBQUMsVUFBVTtJQUN2QixZQUFZLENBQUMsT0FBTztDQUNaLENBQUM7QUFFWCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QiwyQ0FBeUIsQ0FBQTtJQUN6QiwyQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQHBlcmYgdXNlIGNvbnN0IGVudW1zICovXG5leHBvcnQgZW51bSBEaXJlY3RpdmVLaW5kIHtcbiAgT3JpZ2luID0gJyRPUklHSU4nLFxuICBUaW1lVG9MaXZlID0gJyRUVEwnLFxufVxuXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1JFQ09SRF9UWVBFUyA9IFtcbiAgJ1RYVCcsXG4gICdOUycsXG4gICdBJyxcbiAgJ0FBQUEnLFxuICAnQ05BTUUnLFxuICAnTVgnLFxuICAnUFRSJyxcbiAgJ1NQRicsXG4gICdTUlYnLFxuICAnQ0FBJyxcbiAgJ05BUFRSJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBBTExfUkVDT1JEX1RZUEVTID0gWydTT0EnLCAuLi5TVVBQT1JURURfUkVDT1JEX1RZUEVTXSBhcyBjb25zdDtcblxuLyoqIEBwcml2YXRlICovXG5leHBvcnQgY29uc3QgSU5TVFJVQ1RJT05fVFlQRVMgPSBbXG4gIC4uLlNVUFBPUlRFRF9SRUNPUkRfVFlQRVMsXG4gIERpcmVjdGl2ZUtpbmQuVGltZVRvTGl2ZSBhcyAnJFRUTCcsXG4gIERpcmVjdGl2ZUtpbmQuT3JpZ2luIGFzICckT1JJR0lOJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlY29yZFR5cGUgPSB0eXBlb2YgU1VQUE9SVEVEX1JFQ09SRF9UWVBFU1tudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBJbnN0cnVjdGlvblR5cGUgPSB0eXBlb2YgSU5TVFJVQ1RJT05fVFlQRVNbbnVtYmVyXTtcblxuLyoqIEBwZXJmIGNvbnN0IGVudW0gKi9cbmV4cG9ydCBlbnVtIFJlY29yZE1pbkxlbmd0aEtpbmQge1xuICAvKipcbiAgICogdHJlZW1vbmtleTEuY2EuIDNXIElOIFRYVCBcInY9REtJTTFcXDsgaz1yc2FcXDsgcD1NSUdmLi4uXCJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIFRYVCBcImVoPXRydWVcIlxuICAgKi9cbiAgVFhUID0gMSxcblxuICAvKipcbiAgICogd3d3IDFoIElOIENOQU1FIFxcXFwwMDhcXFxcOTkuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgQ05BTUUgaWdsb28uaWdsb28uY29tLlxuICAgKi9cbiAgQ05BTUUgPSAxLFxuXG4gIC8qKlxuICAgKiBlaCAgMXcgICBBIDEyNy4wLjAuMVxuICAgKiBlaCAgICAgICBBIDEyNy4wLjAuMVxuICAgKiAgICAgICAgICBBIDEyNy4wLjAuMVxuICAgKi9cbiAgQSA9IDEsXG5cbiAgLyoqXG4gICAqIGVoIDNXIEFBQUEgIDo6MVxuICAgKiBAICAgICBBQUFBICA6OjFcbiAgICovXG4gIEFBQUEgPSAxLFxuXG4gIC8qKlxuICAgKiBAICAxVyAgICBOUyAgIG5zLmlnbG9vLmNvbS5cbiAgICogQCAgICAgICAgTlMgICBOUzIuTkFNRVNFUlZFUi5ORVQuXG4gICAqICAgIDFXICAgIE5TICAgbnMuaWdsb28uY29tLlxuICAgKi9cbiAgTlMgPSAxLFxuXG4gIC8qKlxuICAgKiAxICAgICAgIDNXICAgUFRSIEhPU1QxLmlnbG9vLmNvbS5cbiAgICogMTAuMyAgICAgICAgIFBUUiBIT1NUMy5pZ2xvby5jb20uXG4gICAqIEAgICAgICAgICAgICBQVFIgSE9TVDMuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgICAgUFRSIEhPU1QzLmlnbG9vLmNvbS5cbiAgICovXG4gIFBUUiA9IDEsXG5cbiAgLyoqXG4gICAqIGlnbG9vLmNvbS4gIE1YICAgIDEwIG1haWwuaWdsb28uY29tLlxuICAgKiAgICAgICAgICAgICBNWCAgICAxMCBtYWlsLmlnbG9vLmNvbS5cbiAgICovXG4gIE1YID0gMixcblxuICAvKipcbiAgICogdGVzdDEgICAzdyAgIElOIFNQRiAgIFwidj1zcGYyXCIgXCJteDpnY2xvdWQtbm9kZS5jb20uXCIgXCItYWxsXCJcbiAgICogICAgICAgICAgICAgICAgIFNQRiAgIFwidj1zcGYzXCIgXCJteDpnY2xvdWQtbm9kZS5jb20uXCIgXCItYWxsICAgIFwiXG4gICAqICAgICAgICAgICAgICAgICBTUEYgICBcInY9c3BmNFwiIFwibXg6Z2Nsb3VkLW5vZGUuY29tLlwiIFwiLWFsbFwiXG4gICAqICAgICAgICAgICAgICAgICBTUEYgICBcInY9c3BmNCBteDpnY2xvdWQtbm9kZS5jb20uXCJcbiAgICovXG4gIFNQRiA9IDEsXG5cbiAgLyoqXG4gICAqIGlnbG9vLmNvbSAgICAgICAzVyBDQUEgMCBpb2RlZiBcIm1haWx0bzpzZWN1cml0eUBpZ2xvby5jb21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgQ0FBIDAgaW9kZWYgXCJtYWlsdG86c2VjdXJpdHlAaWdsb28uY29tXCJcbiAgICovXG4gIENBQSA9IDMsXG5cbiAgLyoqXG4gICAqIF9mb29iYXIuX3RjcCAgICAgICAgU1JWICAgMCAxIDkgb2xkLXNsb3ctYm94LmlnbG9vLmNvbS5cbiAgICogX2Zvb2Jhci5fdGNwICAgMVcgICBTUlYgICAwIDEgOSBvbGQtc2xvdy1ib3guaWdsb28uY29tLlxuICAgKi9cbiAgU1JWID0gNCxcblxuICAvKipcbiAgICogcmZjMzQwMy0xIDg2NDAwIElOIE5BUFRSIDEwMCAxMCBcInVcIiBcInNpcCtFMlVcIiBcIiFeLiokIXNpcDppbmZvcm1hdGlvbkBmb28uc2UhaVwiIC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIDY5IDQyICBcInVcIiBcInNpcFwiICAgICBcIi4qXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5cbiAgICovXG4gIE5BUFRSID0gNixcblxuICAvKipcbiAgICogb3IgNiB8IDcuLi5cbiAgICovXG4gIFNPQSA9IDcsXG59XG5cbi8qKiBAcGVyZiBjb25zdCBlbnVtICovXG5leHBvcnQgZW51bSBSZWNvcmRNYXhMZW5ndGhLaW5kIHtcbiAgLyoqXG4gICAqIEBleGFtcGxlICAgICAgICAgICBTUEYgICAgdj1zcGYxICBpcDo0OjE5Mi4xNjguMC4xLzE2LWFsbFxuICAgKiBAZXhhbXBsZSAgICAgICAgICAgU1BGICAgIHY9c3BmMSAgaXA0OjE5Mi4wLjIuMC8yNCBpcDQ6MTk4LjUxLjEwMC4xMjMgYSAtYWxsXG4gICAqL1xuICBTUEYgPSBJbmZpbml0eSxcbiAgU09BID0gSW5maW5pdHksXG4gIFRYVCA9IDEsXG4gIENOQU1FID0gMSxcbiAgQSA9IDEsXG4gIEFBQUEgPSAxLFxuICBOUyA9IDEsXG4gIFBUUiA9IDEsXG4gIE1YID0gMixcbiAgQ0FBID0gMyxcbiAgU1JWID0gNCxcbiAgTkFQVFIgPSA2LFxufVxuXG4vKiogQHBlcmYgdXNlIG51bWJlcnMgaGVyZSBpbiBwcm9kdWN0aW9uICYgY29uc3QgZW51bSAqL1xuZXhwb3J0IGVudW0gRXJyb3JLZXlLaW5kIHtcbiAgLy8gPT09IHNwZWNpYWwgPT09XG4gIC8qKiBhcGkgZXJyb3IsIHVudXNlZCAqL1xuICBBcGkgPSAnQVBJJyxcbiAgLyoqIG5vdGhpbmcgaW4gdGhlIGlucHV0ICovXG4gIEVtcHR5SW5wdXQgPSAnRU1QVFknLFxuICAvKiogbm90aGluZyB0byBjcmVhdGUgKi9cbiAgTm9SZWNvcmRzID0gJ05PX1JFQ09SRFNfVE9fQ1JFQVRFJyxcbiAgLyoqIHdlIGhhdmUgcmVjb3JkcywgYnV0IG5vbmUgYXJlIHZhbGlkICovXG4gIE5vVmFsaWRSZWNvcmRzID0gJ05PX1ZBTElEX1JFQ09SRFNfVE9fQ1JFQVRFJyxcbiAgLyoqIG5vdCBzdGFuZGFyZCAqL1xuICBCYWREaXJlY3RpdmUgPSAnQkFEX0RJUkVDVElWRScsXG4gIC8qKiBleGlzdHMgZWl0aGVyIGluIGFscmVhZHkgY3JlYXRlZCByZWNvcmRzIG9yIHR3aWNlIGhlcmUgKi9cbiAgRHVwbGljYXRlZCA9ICdEVVBMSUNBVEVEJyxcbiAgLyoqIHVua25vd24gKi9cbiAgVW5rbm93biA9ICdVTktOT1dOJyxcbiAgLyoqIGZhbGxiYWNrIGNhc2UgKi9cbiAgTWlzc2luZyA9ICcnLFxuXG4gIC8vID09PSB0dGwgPT09XG4gIC8qKiBJbnZhbGlkIHR0bCBmb3JtYXQgKi9cbiAgVHRsSW52YWxpZEZvcm1hdCA9ICdUVExfSU5WQUxJRF9GT1JNQVQnLFxuICAvKiogVmFsdWUgdG9vIGxhcmdlICovXG4gIFR0bE92ZXJmbG93ID0gJ1RUTF9PVkVSRkxPVycsXG4gIC8qKiBJbnZhbGlkIGZvcm1hdCAmIG1pc3NpbmcgZGVmYXVsdCB2YWx1ZSBhcyBhIG51bWJlciAqL1xuICBUdGxNaXNzaW5nRGVmYXVsdCA9ICdUVExfSU5WQUxJRF9GT1JNQVRfTUlTU0lOR19ERUZBVUxUJyxcblxuICAvLyA9PT0gYXJncyA9PT1cbiAgLyoqIHdyb25nIG51bWJlciBvZiBhcmdzIGZvciB0aGlzIGluc3RydWN0aW9uICovXG4gIFdyb25nTGVuZ3RoID0gJ1dST05HX0xFTkdUSCcsXG4gIC8qKiBmb3JtYXQgb2YgYW4gaW5zdHJ1Y3Rpb24gaXMgd3JvbmcgKi9cbiAgV3JvbmdOYW1lQXJnc0xlbmd0aCA9ICdFWFRSQV9OQU1FX1RUTF9BUkdTJyxcbn1cblxuZXhwb3J0IGNvbnN0IEVSUk9SX0tFWVMgPSBbXG4gIEVycm9yS2V5S2luZC5BcGksXG4gIEVycm9yS2V5S2luZC5FbXB0eUlucHV0LFxuICBFcnJvcktleUtpbmQuTm9SZWNvcmRzLFxuICBFcnJvcktleUtpbmQuTm9WYWxpZFJlY29yZHMsXG4gIEVycm9yS2V5S2luZC5CYWREaXJlY3RpdmUsXG4gIEVycm9yS2V5S2luZC5UdGxJbnZhbGlkRm9ybWF0LFxuICBFcnJvcktleUtpbmQuVHRsT3ZlcmZsb3csXG4gIEVycm9yS2V5S2luZC5UdGxNaXNzaW5nRGVmYXVsdCxcbiAgRXJyb3JLZXlLaW5kLldyb25nTGVuZ3RoLFxuICBFcnJvcktleUtpbmQuV3JvbmdOYW1lQXJnc0xlbmd0aCxcbiAgRXJyb3JLZXlLaW5kLkR1cGxpY2F0ZWQsXG4gIEVycm9yS2V5S2luZC5Vbmtub3duLFxuXSBhcyBjb25zdDtcblxuLyoqIEBpZGVhIG1vdmUgYHdhcm5pbmdzYCB0byBgZXJyb3JzYCBhbmQgbWFrZSA9PiBgcHJvYmxlbXNgICsgYHNldmVyaXR5YCAqL1xuZXhwb3J0IGVudW0gV2FybmluZ0tleUtpbmQge1xuICBOc0lnbm9yZWQgPSAnU09BX0lHTk9SRUQnLFxuICBTb2FJZ25vcmVkID0gJ05TX0lHTk9SRUQnLFxufVxuXG5leHBvcnQgdHlwZSBUdGxFcnJvcktleVR5cGUgPVxuICB8IEVycm9yS2V5S2luZC5UdGxJbnZhbGlkRm9ybWF0XG4gIHwgRXJyb3JLZXlLaW5kLlR0bE1pc3NpbmdEZWZhdWx0XG4gIHwgRXJyb3JLZXlLaW5kLlR0bE92ZXJmbG93O1xuIl19