Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

minio

Package Overview
Dependencies
Maintainers
4
Versions
80
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

minio - npm Package Compare versions

Comparing version 7.1.3 to 7.1.4

dist/esm/internal/async.d.mts

1

dist/main/errors.d.ts

@@ -79,4 +79,5 @@ /// <reference lib="es2022.error" />

code?: string;
region?: string;
}
export declare class IsValidBucketNameError extends ExtendableError {}
export {};

2

dist/main/errors.js

@@ -138,2 +138,2 @@ "use strict";

exports.IsValidBucketNameError = IsValidBucketNameError;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbmRhYmxlRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsIm9wdCIsIm5hbWUiLCJBbm9ueW1vdXNSZXF1ZXN0RXJyb3IiLCJleHBvcnRzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJJbnZhbGlkUG9ydEVycm9yIiwiSW52YWxpZEVuZHBvaW50RXJyb3IiLCJJbnZhbGlkQnVja2V0TmFtZUVycm9yIiwiSW52YWxpZE9iamVjdE5hbWVFcnJvciIsIkFjY2Vzc0tleVJlcXVpcmVkRXJyb3IiLCJTZWNyZXRLZXlSZXF1aXJlZEVycm9yIiwiRXhwaXJlc1BhcmFtRXJyb3IiLCJJbnZhbGlkRGF0ZUVycm9yIiwiSW52YWxpZFByZWZpeEVycm9yIiwiSW52YWxpZEJ1Y2tldFBvbGljeUVycm9yIiwiSW5jb3JyZWN0U2l6ZUVycm9yIiwiSW52YWxpZFhNTEVycm9yIiwiUzNFcnJvciIsIklzVmFsaWRCdWNrZXROYW1lRXJyb3IiXSwic291cmNlcyI6WyJlcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTUgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8vIDxyZWZlcmVuY2UgbGliPVwiRVMyMDIyLkVycm9yXCIgLz5cblxuY2xhc3MgRXh0ZW5kYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBvcHQ/OiBFcnJvck9wdGlvbnMpIHtcbiAgICAvLyBlcnJvciBPcHRpb24ge2NhdXNlPzogdW5rbm93bn0gaXMgYSAnbmljZSB0byBoYXZlJyxcbiAgICAvLyBkb24ndCB1c2UgaXQgaW50ZXJuYWxseVxuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdClcbiAgICAvLyBzZXQgZXJyb3IgbmFtZSwgb3RoZXJ3aXNlIGl0J3MgYWx3YXlzICdFcnJvcidcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcbiAgfVxufVxuXG4vKipcbiAqIEFub255bW91c1JlcXVlc3RFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGFub255bW91cyBrZXlzIG9uIHNwZWNpZmljXG4gKiBBUElzLiBOT1RFOiBQcmVzaWduZWRVUkwgZ2VuZXJhdGlvbiBhbHdheXMgcmVxdWlyZXMgYWNjZXNzIGtleXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbm9ueW1vdXNSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGFsbCBpbnZhbGlkIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZFBvcnRFcnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkXG4gKiBmb3IgcG9ydHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUG9ydEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZEVuZHBvaW50RXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gaW52YWxpZCBlbmQgcG9pbnQgdmFsdWUgaXNcbiAqIHByb3ZpZGVkIHdoaWNoIGRvZXMgbm90IGZvbGxvdyBkb21haW4gc3RhbmRhcmRzLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEVuZHBvaW50RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkQnVja2V0TmFtZUVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGFuIGludmFsaWQgYnVja2V0IG5hbWUgaXNcbiAqIHByb3ZpZGVkIHdoaWNoIGRvZXMgbm90IGZvbGxvdyBBV1MgUzMgc3BlY2lmaWNhdGlvbnMuXG4gKiBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L0J1Y2tldFJlc3RyaWN0aW9ucy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQnVja2V0TmFtZUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZE9iamVjdE5hbWVFcnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBpbnZhbGlkIG9iamVjdCBuYW1lIGlzXG4gKiBwcm92aWRlZCB3aGljaCBkb2VzIG5vdCBmb2xsb3cgQVdTIFMzIHNwZWNpZmljYXRpb25zLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ01ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRPYmplY3ROYW1lRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBBY2Nlc3NLZXlSZXF1aXJlZEVycm9yIGdlbmVyYXRlZCBieSBzaWduYXR1cmUgbWV0aG9kcyB3aGVuIGFjY2Vzc1xuICoga2V5IGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY2Vzc0tleVJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBTZWNyZXRLZXlSZXF1aXJlZEVycm9yIGdlbmVyYXRlZCBieSBzaWduYXR1cmUgbWV0aG9kcyB3aGVuIHNlY3JldFxuICoga2V5IGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldEtleVJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBFeHBpcmVzUGFyYW1FcnJvciBnZW5lcmF0ZWQgd2hlbiBleHBpcmVzIHBhcmFtZXRlciB2YWx1ZSBpcyBub3RcbiAqIHdlbGwgd2l0aGluIHN0aXB1bGF0ZWQgbGltaXRzLlxuICovXG5leHBvcnQgY2xhc3MgRXhwaXJlc1BhcmFtRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkRGF0ZUVycm9yIGdlbmVyYXRlZCB3aGVuIGludmFsaWQgZGF0ZSBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREYXRlRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkUHJlZml4RXJyb3IgZ2VuZXJhdGVkIHdoZW4gb2JqZWN0IHByZWZpeCBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKiBvciBkb2VzIG5vdCBjb25mb3JtIHRvIEFXUyBTMyBvYmplY3Qga2V5IHJlc3RyaWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRQcmVmaXhFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWRCdWNrZXRQb2xpY3lFcnJvciBnZW5lcmF0ZWQgd2hlbiB0aGUgZ2l2ZW4gYnVja2V0IHBvbGljeSBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEJ1Y2tldFBvbGljeUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW5jb3JyZWN0U2l6ZUVycm9yIGdlbmVyYXRlZCB3aGVuIHRvdGFsIGRhdGEgcmVhZCBtaXNtYXRjaGVzIHdpdGhcbiAqIHRoZSBpbnB1dCBzaXplLlxuICovXG5leHBvcnQgY2xhc3MgSW5jb3JyZWN0U2l6ZUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZFhNTEVycm9yIGdlbmVyYXRlZCB3aGVuIGFuIHVua25vd24gWE1MIGlzIGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFhNTEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogUzNFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGVycm9ycyByZXR1cm5lZCBmcm9tIFMzIHNlcnZlci5cbiAqIHNlZSBnZXRFcnJvclRyYW5zZm9ybWVyIGZvciBkZXRhaWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBTM0Vycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHtcbiAgY29kZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgSXNWYWxpZEJ1Y2tldE5hbWVFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNQSxlQUFlLFNBQVNDLEtBQUssQ0FBQztFQUNsQ0MsV0FBV0EsQ0FBQ0MsT0FBZ0IsRUFBRUMsR0FBa0IsRUFBRTtJQUNo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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbmRhYmxlRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsIm9wdCIsIm5hbWUiLCJBbm9ueW1vdXNSZXF1ZXN0RXJyb3IiLCJleHBvcnRzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJJbnZhbGlkUG9ydEVycm9yIiwiSW52YWxpZEVuZHBvaW50RXJyb3IiLCJJbnZhbGlkQnVja2V0TmFtZUVycm9yIiwiSW52YWxpZE9iamVjdE5hbWVFcnJvciIsIkFjY2Vzc0tleVJlcXVpcmVkRXJyb3IiLCJTZWNyZXRLZXlSZXF1aXJlZEVycm9yIiwiRXhwaXJlc1BhcmFtRXJyb3IiLCJJbnZhbGlkRGF0ZUVycm9yIiwiSW52YWxpZFByZWZpeEVycm9yIiwiSW52YWxpZEJ1Y2tldFBvbGljeUVycm9yIiwiSW5jb3JyZWN0U2l6ZUVycm9yIiwiSW52YWxpZFhNTEVycm9yIiwiUzNFcnJvciIsIklzVmFsaWRCdWNrZXROYW1lRXJyb3IiXSwic291cmNlcyI6WyJlcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTUgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8vIDxyZWZlcmVuY2UgbGliPVwiRVMyMDIyLkVycm9yXCIgLz5cblxuY2xhc3MgRXh0ZW5kYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nLCBvcHQ/OiBFcnJvck9wdGlvbnMpIHtcbiAgICAvLyBlcnJvciBPcHRpb24ge2NhdXNlPzogdW5rbm93bn0gaXMgYSAnbmljZSB0byBoYXZlJyxcbiAgICAvLyBkb24ndCB1c2UgaXQgaW50ZXJuYWxseVxuICAgIHN1cGVyKG1lc3NhZ2UsIG9wdClcbiAgICAvLyBzZXQgZXJyb3IgbmFtZSwgb3RoZXJ3aXNlIGl0J3MgYWx3YXlzICdFcnJvcidcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcbiAgfVxufVxuXG4vKipcbiAqIEFub255bW91c1JlcXVlc3RFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGFub255bW91cyBrZXlzIG9uIHNwZWNpZmljXG4gKiBBUElzLiBOT1RFOiBQcmVzaWduZWRVUkwgZ2VuZXJhdGlvbiBhbHdheXMgcmVxdWlyZXMgYWNjZXNzIGtleXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBbm9ueW1vdXNSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGFsbCBpbnZhbGlkIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZFBvcnRFcnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbiBpbnRlZ2VyIHZhbHVlIGlzIHByb3ZpZGVkXG4gKiBmb3IgcG9ydHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUG9ydEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZEVuZHBvaW50RXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gaW52YWxpZCBlbmQgcG9pbnQgdmFsdWUgaXNcbiAqIHByb3ZpZGVkIHdoaWNoIGRvZXMgbm90IGZvbGxvdyBkb21haW4gc3RhbmRhcmRzLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEVuZHBvaW50RXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkQnVja2V0TmFtZUVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGFuIGludmFsaWQgYnVja2V0IG5hbWUgaXNcbiAqIHByb3ZpZGVkIHdoaWNoIGRvZXMgbm90IGZvbGxvdyBBV1MgUzMgc3BlY2lmaWNhdGlvbnMuXG4gKiBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L0J1Y2tldFJlc3RyaWN0aW9ucy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQnVja2V0TmFtZUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZE9iamVjdE5hbWVFcnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBpbnZhbGlkIG9iamVjdCBuYW1lIGlzXG4gKiBwcm92aWRlZCB3aGljaCBkb2VzIG5vdCBmb2xsb3cgQVdTIFMzIHNwZWNpZmljYXRpb25zLlxuICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ01ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRPYmplY3ROYW1lRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBBY2Nlc3NLZXlSZXF1aXJlZEVycm9yIGdlbmVyYXRlZCBieSBzaWduYXR1cmUgbWV0aG9kcyB3aGVuIGFjY2Vzc1xuICoga2V5IGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY2Vzc0tleVJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBTZWNyZXRLZXlSZXF1aXJlZEVycm9yIGdlbmVyYXRlZCBieSBzaWduYXR1cmUgbWV0aG9kcyB3aGVuIHNlY3JldFxuICoga2V5IGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlY3JldEtleVJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBFeHBpcmVzUGFyYW1FcnJvciBnZW5lcmF0ZWQgd2hlbiBleHBpcmVzIHBhcmFtZXRlciB2YWx1ZSBpcyBub3RcbiAqIHdlbGwgd2l0aGluIHN0aXB1bGF0ZWQgbGltaXRzLlxuICovXG5leHBvcnQgY2xhc3MgRXhwaXJlc1BhcmFtRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkRGF0ZUVycm9yIGdlbmVyYXRlZCB3aGVuIGludmFsaWQgZGF0ZSBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWREYXRlRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cblxuLyoqXG4gKiBJbnZhbGlkUHJlZml4RXJyb3IgZ2VuZXJhdGVkIHdoZW4gb2JqZWN0IHByZWZpeCBwcm92aWRlZCBpcyBpbnZhbGlkXG4gKiBvciBkb2VzIG5vdCBjb25mb3JtIHRvIEFXUyBTMyBvYmplY3Qga2V5IHJlc3RyaWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRQcmVmaXhFcnJvciBleHRlbmRzIEV4dGVuZGFibGVFcnJvciB7fVxuXG4vKipcbiAqIEludmFsaWRCdWNrZXRQb2xpY3lFcnJvciBnZW5lcmF0ZWQgd2hlbiB0aGUgZ2l2ZW4gYnVja2V0IHBvbGljeSBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZEJ1Y2tldFBvbGljeUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW5jb3JyZWN0U2l6ZUVycm9yIGdlbmVyYXRlZCB3aGVuIHRvdGFsIGRhdGEgcmVhZCBtaXNtYXRjaGVzIHdpdGhcbiAqIHRoZSBpbnB1dCBzaXplLlxuICovXG5leHBvcnQgY2xhc3MgSW5jb3JyZWN0U2l6ZUVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogSW52YWxpZFhNTEVycm9yIGdlbmVyYXRlZCB3aGVuIGFuIHVua25vd24gWE1MIGlzIGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgSW52YWxpZFhNTEVycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHt9XG5cbi8qKlxuICogUzNFcnJvciBpcyBnZW5lcmF0ZWQgZm9yIGVycm9ycyByZXR1cm5lZCBmcm9tIFMzIHNlcnZlci5cbiAqIHNlZSBnZXRFcnJvclRyYW5zZm9ybWVyIGZvciBkZXRhaWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBTM0Vycm9yIGV4dGVuZHMgRXh0ZW5kYWJsZUVycm9yIHtcbiAgY29kZT86IHN0cmluZ1xuICByZWdpb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIElzVmFsaWRCdWNrZXROYW1lRXJyb3IgZXh0ZW5kcyBFeHRlbmRhYmxlRXJyb3Ige31cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsTUFBTUEsZUFBZSxTQUFTQyxLQUFLLENBQUM7RUFDbENDLFdBQVdBLENBQUNDLE9BQWdCLEVB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

@@ -7,8 +7,10 @@ /// <reference types="node" />

import * as https from 'node:https';
import type * as stream from 'node:stream';
import * as stream from 'node:stream';
import { CredentialProvider } from "../CredentialProvider.js";
import type { SelectResults } from "../helpers.js";
import { LEGAL_HOLD_STATUS } from "../helpers.js";
import { Extensions } from "./extensions.js";
import type { Region } from "./s3-endpoints.js";
import type { Binary, BucketItemFromList, BucketItemStat, IRequest, ReplicationConfig, ReplicationConfigOpts, RequestHeaders, ResultCallback, StatObjectOpts, Transport } from "./type.js";
import type { UploadedPart } from "./xml-parser.js";
import type { Binary, BucketItemFromList, BucketItemStat, BucketStream, BucketVersioningConfiguration, EncryptionConfig, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, IRequest, ItemBucketMetadata, LifecycleConfig, LifeCycleConfigParam, ObjectLockInfo, ObjectMetaData, PutObjectLegalHoldOptions, ReplicationConfig, ReplicationConfigOpts, RequestHeaders, ResultCallback, Retention, SelectOptions, StatObjectOpts, Tag, TaggingOpts, Tags, Transport, UploadedObjectInfo, VersionIdentificator } from "./type.js";
import type { ListMultipartResult, UploadedPart } from "./xml-parser.js";
declare const requestOptionProperties: readonly ["agent", "ca", "cert", "ciphers", "clientCertEngine", "crl", "dhparam", "ecdhCurve", "family", "honorCipherOrder", "key", "passphrase", "pfx", "rejectUnauthorized", "secureOptions", "secureProtocol", "servername", "sessionIdContext"];

@@ -38,2 +40,5 @@ export interface ClientOptions {

export type NoResultCallback = (error: unknown) => void;
export interface MakeBucketOpt {
ObjectLocking?: boolean;
}
export interface RemoveOptions {

@@ -163,2 +168,11 @@ versionId?: string;

getBucketRegion(bucketName: string, cb: (err: unknown, region: string) => void): Promise<void>;
/**
* Creates the bucket `bucketName`.
*
*/
makeBucket(bucketName: string, region?: Region, makeOpts?: MakeBucketOpt): Promise<void>;
/**
* To check if a bucket already exists.
*/
bucketExists(bucketName: string): Promise<boolean>;
removeBucket(bucketName: string): Promise<void>;

@@ -170,2 +184,25 @@ /**

/**
* Callback is called with readable stream of the object content.
*/
getObject(bucketName: string, objectName: string, getOpts?: VersionIdentificator): Promise<stream.Readable>;
/**
* Callback is called with readable stream of the partial object content.
* @param bucketName
* @param objectName
* @param offset
* @param length - length of the object that will be read in the stream (optional, if not specified we read the rest of the file from the offset)
* @param getOpts
*/
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number, getOpts?: VersionIdentificator): Promise<stream.Readable>;
/**
* download object content to a file.
* This method will create a temp file named `${filename}.${etag}.part.minio` when downloading.
*
* @param bucketName - name of the bucket
* @param objectName - name of the object
* @param filePath - path to which the object data will be written to
* @param getOpts - Optional object get option
*/
fGetObject(bucketName: string, objectName: string, filePath: string, getOpts?: VersionIdentificator): Promise<void>;
/**
* Stat information of the object.

@@ -184,3 +221,8 @@ */

removeObject(bucketName: string, objectName: string, removeOpts?: RemoveOptions): Promise<void>;
listIncompleteUploads(bucket: string, prefix: string, recursive: boolean): BucketStream<IncompleteUploadedBucketItem>;
/**
* Called by listIncompleteUploads to fetch a batch of incomplete uploads.
*/
listIncompleteUploadsQuery(bucketName: string, prefix: string, keyMarker: string, uploadIdMarker: string, delimiter: string): Promise<ListMultipartResult>;
/**
* Initiate a new multipart upload.

@@ -198,3 +240,14 @@ * @internal

abortMultipartUpload(bucketName: string, objectName: string, uploadId: string): Promise<void>;
findUploadId(bucketName: string, objectName: string): Promise<string | undefined>;
/**
* this call will aggregate the parts on the server into a single object.
*/
completeMultipartUpload(bucketName: string, objectName: string, uploadId: string, etags: {
part: number;
etag?: string;
}[]): Promise<{
etag: string;
versionId: string | null;
}>;
/**
* Get part-info of all parts of an incomplete upload specified by uploadId.

@@ -208,9 +261,72 @@ */

listBuckets(): Promise<BucketItemFromList[]>;
/**
* Calculate part size given the object size. Part size will be atleast this.partSize
*/
calculatePartSize(size: number): number;
/**
* Uploads the object using contents from a file
*/
fPutObject(bucketName: string, objectName: string, filePath: string, metaData?: ObjectMetaData): Promise<void>;
/**
* Uploading a stream, "Buffer" or "string".
* It's recommended to pass `size` argument with stream.
*/
putObject(bucketName: string, objectName: string, stream: stream.Readable | Buffer | string, size?: number, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
/**
* method to upload buffer in one call
* @private
*/
private uploadBuffer;
/**
* upload stream with MultipartUpload
* @private
*/
private uploadStream;
removeBucketReplication(bucketName: string): Promise<void>;
removeBucketReplication(bucketName: string, callback: NoResultCallback): void;
setBucketReplication(bucketName: string, replicationConfig: ReplicationConfigOpts, callback: NoResultCallback): void;
setBucketReplication(bucketName: string, replicationConfig: ReplicationConfigOpts): void;
setBucketReplication(bucketName: string, replicationConfig: ReplicationConfigOpts): Promise<void>;
getBucketReplication(bucketName: string, callback: ResultCallback<ReplicationConfig>): void;
getBucketReplication(bucketName: string): void;
getBucketReplication(bucketName: string): Promise<ReplicationConfig>;
getObjectLegalHold(bucketName: string, objectName: string, getOpts?: GetObjectLegalHoldOptions, callback?: ResultCallback<LEGAL_HOLD_STATUS>): Promise<LEGAL_HOLD_STATUS>;
setObjectLegalHold(bucketName: string, objectName: string, setOpts?: PutObjectLegalHoldOptions): void;
/**
* Get Tags associated with a Bucket
*/
getBucketTagging(bucketName: string): Promise<Tag[]>;
/**
* Get the tags associated with a bucket OR an object
*/
getObjectTagging(bucketName: string, objectName: string, getOpts?: VersionIdentificator): Promise<Tag[]>;
/**
* Set the policy on a bucket or an object prefix.
*/
setBucketPolicy(bucketName: string, policy: string): Promise<void>;
/**
* Get the policy on a bucket or an object prefix.
*/
getBucketPolicy(bucketName: string): Promise<string>;
putObjectRetention(bucketName: string, objectName: string, retentionOpts?: Retention): Promise<void>;
getObjectLockConfig(bucketName: string, callback: ResultCallback<ObjectLockInfo>): void;
getObjectLockConfig(bucketName: string): void;
getObjectLockConfig(bucketName: string): Promise<ObjectLockInfo>;
setObjectLockConfig(bucketName: string, lockConfigOpts: Omit<ObjectLockInfo, 'objectLockEnabled'>): void;
setObjectLockConfig(bucketName: string, lockConfigOpts: Omit<ObjectLockInfo, 'objectLockEnabled'>): Promise<void>;
getBucketVersioning(bucketName: string): Promise<void>;
setBucketVersioning(bucketName: string, versionConfig: BucketVersioningConfiguration): Promise<void>;
private setTagging;
private removeTagging;
setBucketTagging(bucketName: string, tags: Tag): Promise<void>;
removeBucketTagging(bucketName: string): Promise<void>;
setObjectTagging(bucketName: string, objectName: string, tags: Tags, putOpts: TaggingOpts): Promise<void>;
removeObjectTagging(bucketName: string, objectName: string, removeOpts: TaggingOpts): Promise<void>;
selectObjectContent(bucketName: string, objectName: string, selectOpts: SelectOptions): Promise<SelectResults | undefined>;
private applyBucketLifecycle;
removeBucketLifecycle(bucketName: string): Promise<void>;
setBucketLifecycle(bucketName: string, lifeCycleConfig: LifeCycleConfigParam): Promise<void>;
getBucketLifecycle(bucketName: string): Promise<LifecycleConfig | null>;
setBucketEncryption(bucketName: string, encryptionConfig?: EncryptionConfig): Promise<void>;
getBucketEncryption(bucketName: string): Promise<any>;
removeBucketEncryption(bucketName: string): Promise<void>;
}
export {};
/// <reference types="node" />
/// <reference types="node" />
import * as stream from 'node:stream';
import _ from 'lodash';
import type { Binary, Encryption, ObjectMetaData, RequestHeaders, ResponseHeader } from "./type.js";
/**
* All characters in string which are NOT unreserved should be percent encoded.
* Unreserved characters are : ALPHA / DIGIT / "-" / "." / "_" / "~"
* Reference https://tools.ietf.org/html/rfc3986#section-2.2
*/
export declare function uriEscape(string: string): string;
export declare function hashBinary(buf: Buffer, enableSHA256: boolean): {
md5sum: string;
sha256sum: string;
};
export declare function uriEscape(uriStr: string): string;
export declare function uriResourceEscape(string: string): string;

@@ -169,2 +169,6 @@ export declare function getScope(region: string, date: Date, serviceName?: string): string;

} | null;
export declare function parseXml(xml: string): any;
export declare function parseXml(xml: string): any;
/**
* get content size of object content to upload
*/
export declare function getContentLength(s: stream.Readable | Buffer | string): Promise<number | null>;

@@ -8,2 +8,3 @@ "use strict";

exports.extractMetadata = extractMetadata;
exports.getContentLength = getContentLength;
exports.getEncryptionHeaders = getEncryptionHeaders;

@@ -13,2 +14,3 @@ exports.getScope = getScope;

exports.getVersionId = getVersionId;
exports.hashBinary = hashBinary;
exports.insertContentType = insertContentType;

@@ -59,2 +61,3 @@ exports.isAmazonEndpoint = isAmazonEndpoint;

var mime = _interopRequireWildcard(require("mime-types"), true);
var _async = require("./async.js");
var _type = require("./type.js");

@@ -80,27 +83,18 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

const MetaDataHeaderPrefix = 'x-amz-meta-';
function hashBinary(buf, enableSHA256) {
let sha256sum = '';
if (enableSHA256) {
sha256sum = crypto.createHash('sha256').update(buf).digest('hex');
}
const md5sum = crypto.createHash('md5').update(buf).digest('base64');
return {
md5sum,
sha256sum
};
}
/**
* All characters in string which are NOT unreserved should be percent encoded.
* Unreserved characters are : ALPHA / DIGIT / "-" / "." / "_" / "~"
* Reference https://tools.ietf.org/html/rfc3986#section-2.2
*/
function uriEscape(string) {
return string.split('').reduce((acc, elem) => {
const buf = Buffer.from(elem);
if (buf.length === 1) {
// length 1 indicates that elem is not a unicode character.
// Check if it is an unreserved characer.
if ('A' <= elem && elem <= 'Z' || 'a' <= elem && elem <= 'z' || '0' <= elem && elem <= '9' || elem === '_' || elem === '.' || elem === '~' || elem === '-') {
// Unreserved characer should not be encoded.
acc = acc + elem;
return acc;
}
}
// elem needs encoding - i.e elem should be encoded if it's not unreserved
// character or if it's a unicode character.
for (const char of buf) {
acc = acc + '%' + char.toString(16).toUpperCase();
}
return acc;
}, '');
// S3 percent-encodes some extra non-standard characters in a URI . So comply with S3.
const encodeAsHex = c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;
function uriEscape(uriStr) {
return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);
}

@@ -168,5 +162,5 @@ function uriResourceEscape(string) {

}
const alphaNumerics = '`~!@#$%^&*()+={}[]|\\"\';:><?/';
const nonAlphaNumerics = '`~!@#$%^&*()+={}[]|\\"\';:><?/';
// All non alphanumeric characters are invalid.
for (const char of alphaNumerics) {
for (const char of nonAlphaNumerics) {
if (host.includes(char)) {

@@ -579,2 +573,27 @@ return false;

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJzdHJlYW0iLCJfZmFzdFhtbFBhcnNlciIsIl9pcGFkZHIiLCJfbG9kYXNoIiwibWltZSIsIl90eXBlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIk1ldGFEYXRhSGVhZGVyUHJlZml4IiwidXJpRXNjYXBlIiwic3RyaW5nIiwic3BsaXQiLCJyZWR1Y2UiLCJhY2MiLCJlbGVtIiwiYnVmIiwiQnVmZmVyIiwiZnJvbSIsImxlbmd0aCIsImNoYXIiLCJ0b1N0cmluZyIsInRvVXBwZXJDYXNlIiwidXJpUmVzb3VyY2VFc2NhcGUiLCJyZXBsYWNlIiwiZ2V0U2NvcGUiLCJyZWdpb24iLCJkYXRlIiwic2VydmljZU5hbWUiLCJtYWtlRGF0ZVNob3J0IiwiaXNBbWF6b25FbmRwb2ludCIsImVuZHBvaW50IiwiaXNWaXJ0dWFsSG9zdFN0eWxlIiwicHJvdG9jb2wiLCJidWNrZXQiLCJwYXRoU3R5bGUiLCJpbmNsdWRlcyIsImlzVmFsaWRJUCIsImlwIiwiaXBhZGRyIiwiaXNWYWxpZCIsImlzVmFsaWRFbmRwb2ludCIsImlzVmFsaWREb21haW4iLCJob3N0IiwiaXNTdHJpbmciLCJzbGljZSIsImFscGhhTnVtZXJpY3MiLCJwcm9iZUNvbnRlbnRUeXBlIiwicGF0aCIsImNvbnRlbnRUeXBlIiwibG9va3VwIiwiaXNWYWxpZFBvcnQiLCJwb3J0IiwiaXNOdW1iZXIiLCJpc1ZhbGlkQnVja2V0TmFtZSIsInRlc3QiLCJpc1ZhbGlkT2JqZWN0TmFtZSIsIm9iamVjdE5hbWUiLCJpc1ZhbGlkUHJlZml4IiwicHJlZml4IiwiYXJnIiwiaXNGdW5jdGlvbiIsImlzT2JqZWN0IiwiaXNSZWFkYWJsZVN0cmVhbSIsIl9yZWFkIiwiaXNCb29sZWFuIiwiaXNFbXB0eSIsIm8iLCJfIiwiaXNFbXB0eU9iamVjdCIsInZhbHVlcyIsImZpbHRlciIsIngiLCJ1bmRlZmluZWQiLCJpc0RlZmluZWQiLCJpc1ZhbGlkRGF0ZSIsIkRhdGUiLCJpc05hTiIsIm1ha2VEYXRlTG9uZyIsInMiLCJ0b0lTT1N0cmluZyIsInBpcGVzZXR1cCIsInN0cmVhbXMiLCJzcmMiLCJkc3QiLCJvbiIsImVyciIsImVtaXQiLCJwaXBlIiwicmVhZGFibGVTdHJlYW0iLCJkYXRhIiwiUmVhZGFibGUiLCJwdXNoIiwiaW5zZXJ0Q29udGVudFR5cGUiLCJtZXRhRGF0YSIsImZpbGVQYXRoIiwidG9Mb3dlckNhc2UiLCJwcmVwZW5kWEFNWk1ldGEiLCJtYXBLZXlzIiwidmFsdWUiLCJpc0FtekhlYWRlciIsImlzU3VwcG9ydGVkSGVhZGVyIiwiaXNTdG9yYWdlQ2xhc3NIZWFkZXIiLCJ0ZW1wIiwic3RhcnRzV2l0aCIsInN1cHBvcnRlZF9oZWFkZXJzIiwiZXh0cmFjdE1ldGFkYXRhIiwiaGVhZGVycyIsInBpY2tCeSIsImxvd2VyIiwiZ2V0VmVyc2lvbklkIiwiZ2V0U291cmNlVmVyc2lvbklkIiwic2FuaXRpemVFVGFnIiwiZXRhZyIsInJlcGxhY2VDaGFycyIsIm0iLCJ0b01kNSIsInBheWxvYWQiLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwidG9TaGEyNTYiLCJ0b0FycmF5IiwicGFyYW0iLCJBcnJheSIsImlzQXJyYXkiLCJzYW5pdGl6ZU9iamVjdEtleSIsImFzU3RyTmFtZSIsImRlY29kZVVSSUNvbXBvbmVudCIsInNhbml0aXplU2l6ZSIsInNpemUiLCJOdW1iZXIiLCJwYXJzZUludCIsIlBBUlRfQ09OU1RSQUlOVFMiLCJBQlNfTUlOX1BBUlRfU0laRSIsIk1JTl9QQVJUX1NJWkUiLCJNQVhfUEFSVFNfQ09VTlQiLCJNQVhfUEFSVF9TSVpFIiwiTUFYX1NJTkdMRV9QVVRfT0JKRUNUX1NJWkUiLCJNQVhfTVVMVElQQVJUX1BVVF9PQkpFQ1RfU0laRSIsImV4cG9ydHMiLCJHRU5FUklDX1NTRV9IRUFERVIiLCJFTkNSWVBUSU9OX0hFQURFUlMiLCJzc2VHZW5lcmljSGVhZGVyIiwic3NlS21zS2V5SUQiLCJnZXRFbmNyeXB0aW9uSGVhZGVycyIsImVuY0NvbmZpZyIsImVuY1R5cGUiLCJ0eXBlIiwiRU5DUllQVElPTl9UWVBFUyIsIlNTRUMiLCJLTVMiLCJTU0VBbGdvcml0aG0iLCJLTVNNYXN0ZXJLZXlJRCIsInBhcnRzUmVxdWlyZWQiLCJtYXhQYXJ0U2l6ZSIsInJlcXVpcmVkUGFydFNpemUiLCJNYXRoIiwidHJ1bmMiLCJjYWxjdWxhdGVFdmVuU3BsaXRzIiwib2JqSW5mbyIsInJlcVBhcnRzIiwic3RhcnRJbmRleFBhcnRzIiwiZW5kSW5kZXhQYXJ0cyIsInN0YXJ0IiwiU3RhcnQiLCJkaXZpc29yVmFsdWUiLCJyZW1pbmRlclZhbHVlIiwibmV4dFN0YXJ0IiwiaSIsImN1clBhcnRTaXplIiwiY3VycmVudFN0YXJ0IiwiY3VycmVudEVuZCIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsImZ4cCIsIlhNTFBhcnNlciIsInBhcnNlWG1sIiwieG1sIiwicmVzdWx0IiwicGFyc2UiLCJFcnJvciJdLCJzb3VyY2VzIjpbImhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTWluSU8gSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSBNaW5JTywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nXG5pbXBvcnQgKiBhcyBzdHJlYW0gZnJvbSAnbm9kZTpzdHJlYW0nXG5cbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcidcbmltcG9ydCBpcGFkZHIgZnJvbSAnaXBhZGRyLmpzJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0ICogYXMgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IEJpbmFyeSwgRW5jcnlwdGlvbiwgT2JqZWN0TWV0YURhdGEsIFJlcXVlc3RIZWFkZXJzLCBSZXNwb25zZUhlYWRlciB9IGZyb20gJy4vdHlwZS50cydcbmltcG9ydCB7IEVOQ1JZUFRJT05fVFlQRVMgfSBmcm9tICcuL3R5cGUudHMnXG5cbmNvbnN0IE1ldGFEYXRhSGVhZGVyUHJlZml4ID0gJ3gtYW16LW1ldGEtJ1xuXG4vKipcbiAqIEFsbCBjaGFyYWN0ZXJzIGluIHN0cmluZyB3aGljaCBhcmUgTk9UIHVucmVzZXJ2ZWQgc2hvdWxkIGJlIHBlcmNlbnQgZW5jb2RlZC5cbiAqIFVucmVzZXJ2ZWQgY2hhcmFjdGVycyBhcmUgOiBBTFBIQSAvIERJR0lUIC8gXCItXCIgLyBcIi5cIiAvIFwiX1wiIC8gXCJ+XCJcbiAqIFJlZmVyZW5jZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIuMlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXJpRXNjYXBlKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpLnJlZHVjZSgoYWNjOiBzdHJpbmcsIGVsZW06IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGVsZW0pXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIGxlbmd0aCAxIGluZGljYXRlcyB0aGF0IGVsZW0gaXMgbm90IGEgdW5pY29kZSBjaGFyYWN0ZXIuXG4gICAgICAvLyBDaGVjayBpZiBpdCBpcyBhbiB1bnJlc2VydmVkIGNoYXJhY2VyLlxuICAgICAgaWYgKFxuICAgICAgICAoJ0EnIDw9IGVsZW0gJiYgZWxlbSA8PSAnWicpIHx8XG4gICAgICAgICgnYScgPD0gZWxlbSAmJiBlbGVtIDw9ICd6JykgfHxcbiAgICAgICAgKCcwJyA8PSBlbGVtICYmIGVsZW0gPD0gJzknKSB8fFxuICAgICAgICBlbGVtID09PSAnXycgfHxcbiAgICAgICAgZWxlbSA9PT0gJy4nIHx8XG4gICAgICAgIGVsZW0gPT09ICd+JyB8fFxuICAgICAgICBlbGVtID09PSAnLSdcbiAgICAgICkge1xuICAgICAgICAvLyBVbnJlc2VydmVkIGNoYXJhY2VyIHNob3VsZCBub3QgYmUgZW5jb2RlZC5cbiAgICAgICAgYWNjID0gYWNjICsgZWxlbVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9XG4gICAgfVxuICAgIC8vIGVsZW0gbmVlZHMgZW5jb2RpbmcgLSBpLmUgZWxlbSBzaG91bGQgYmUgZW5jb2RlZCBpZiBpdCdzIG5vdCB1bnJlc2VydmVkXG4gICAgLy8gY2hhcmFjdGVyIG9yIGlmIGl0J3MgYSB1bmljb2RlIGNoYXJhY3Rlci5cbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgYnVmKSB7XG4gICAgICBhY2MgPSBhY2MgKyAnJScgKyBjaGFyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgfVxuICAgIHJldHVybiBhY2NcbiAgfSwgJycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmlSZXNvdXJjZUVzY2FwZShzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gdXJpRXNjYXBlKHN0cmluZykucmVwbGFjZSgvJTJGL2csICcvJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjb3BlKHJlZ2lvbjogc3RyaW5nLCBkYXRlOiBEYXRlLCBzZXJ2aWNlTmFtZSA9ICdzMycpIHtcbiAgcmV0dXJuIGAke21ha2VEYXRlU2hvcnQoZGF0ZSl9LyR7cmVnaW9ufS8ke3NlcnZpY2VOYW1lfS9hd3M0X3JlcXVlc3RgXG59XG5cbi8qKlxuICogaXNBbWF6b25FbmRwb2ludCAtIHRydWUgaWYgZW5kcG9pbnQgaXMgJ3MzLmFtYXpvbmF3cy5jb20nIG9yICdzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FtYXpvbkVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGVuZHBvaW50ID09PSAnczMuYW1hem9uYXdzLmNvbScgfHwgZW5kcG9pbnQgPT09ICdzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24nXG59XG5cbi8qKlxuICogaXNWaXJ0dWFsSG9zdFN0eWxlIC0gdmVyaWZ5IGlmIGJ1Y2tldCBuYW1lIGlzIHN1cHBvcnQgd2l0aCB2aXJ0dWFsXG4gKiBob3N0cy4gYnVja2V0TmFtZXMgd2l0aCBwZXJpb2RzIHNob3VsZCBiZSBhbHdheXMgdHJlYXRlZCBhcyBwYXRoXG4gKiBzdHlsZSBpZiB0aGUgcHJvdG9jb2wgaXMgJ2h0dHBzOicsIHRoaXMgaXMgZHVlIHRvIFNTTCB3aWxkY2FyZFxuICogbGltaXRhdGlvbi4gRm9yIGFsbCBvdGhlciBidWNrZXRzIGFuZCBBbWF6b24gUzMgZW5kcG9pbnQgd2Ugd2lsbFxuICogZGVmYXVsdCB0byB2aXJ0dWFsIGhvc3Qgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxIb3N0U3R5bGUoZW5kcG9pbnQ6IHN0cmluZywgcHJvdG9jb2w6IHN0cmluZywgYnVja2V0OiBzdHJpbmcsIHBhdGhTdHlsZTogYm9vbGVhbikge1xuICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonICYmIGJ1Y2tldC5pbmNsdWRlcygnLicpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGlzQW1hem9uRW5kcG9pbnQoZW5kcG9pbnQpIHx8ICFwYXRoU3R5bGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRJUChpcDogc3RyaW5nKSB7XG4gIHJldHVybiBpcGFkZHIuaXNWYWxpZChpcClcbn1cblxuLyoqXG4gKiBAcmV0dXJucyBpZiBlbmRwb2ludCBpcyB2YWxpZCBkb21haW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xuICByZXR1cm4gaXNWYWxpZERvbWFpbihlbmRwb2ludCkgfHwgaXNWYWxpZElQKGVuZHBvaW50KVxufVxuXG4vKipcbiAqIEByZXR1cm5zIGlmIGlucHV0IGhvc3QgaXMgYSB2YWxpZCBkb21haW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRG9tYWluKGhvc3Q6IHN0cmluZykge1xuICBpZiAoIWlzU3RyaW5nKGhvc3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gU2VlIFJGQyAxMDM1LCBSRkMgMzY5Ni5cbiAgaWYgKGhvc3QubGVuZ3RoID09PSAwIHx8IGhvc3QubGVuZ3RoID4gMjU1KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gSG9zdCBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggYSAnLSdcbiAgaWYgKGhvc3RbMF0gPT09ICctJyB8fCBob3N0LnNsaWNlKC0xKSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gSG9zdCBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggYSAnXydcbiAgaWYgKGhvc3RbMF0gPT09ICdfJyB8fCBob3N0LnNsaWNlKC0xKSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gSG9zdCBjYW5ub3Qgc3RhcnQgd2l0aCBhICcuJ1xuICBpZiAoaG9zdFswXSA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBhbHBoYU51bWVyaWNzID0gJ2B+IUAjJCVeJiooKSs9e31bXXxcXFxcXCJcXCc7Oj48Py8nXG4gIC8vIEFsbCBub24gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYXJlIGludmFsaWQuXG4gIGZvciAoY29uc3QgY2hhciBvZiBhbHBoYU51bWVyaWNzKSB7XG4gICAgaWYgKGhvc3QuaW5jbHVkZXMoY2hhcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICAvLyBObyBuZWVkIHRvIHJlZ2V4cCBtYXRjaCwgc2luY2UgdGhlIGxpc3QgaXMgbm9uLWV4aGF1c3RpdmUuXG4gIC8vIFdlIGxldCBpdCBiZSB2YWxpZCBhbmQgZmFpbCBsYXRlci5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBQcm9iZXMgY29udGVudFR5cGUgdXNpbmcgZmlsZSBleHRlbnNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIC8vIHJldHVybiAnaW1hZ2UvcG5nJ1xuICogcHJvYmVDb250ZW50VHlwZSgnZmlsZS5wbmcnKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9iZUNvbnRlbnRUeXBlKHBhdGg6IHN0cmluZykge1xuICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChwYXRoKVxuICBpZiAoIWNvbnRlbnRUeXBlKSB7XG4gICAgY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICB9XG4gIHJldHVybiBjb250ZW50VHlwZVxufVxuXG4vKipcbiAqIGlzIGlucHV0IHBvcnQgdmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUG9ydChwb3J0OiB1bmtub3duKTogcG9ydCBpcyBudW1iZXIge1xuICAvLyB2ZXJpZnkgaWYgcG9ydCBpcyBhIG51bWJlci5cbiAgaWYgKCFpc051bWJlcihwb3J0KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gcG9ydCBgMGAgaXMgdmFsaWQgYW5kIHNwZWNpYWwgY2FzZVxuICByZXR1cm4gMCA8PSBwb3J0ICYmIHBvcnQgPD0gNjU1MzVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRCdWNrZXROYW1lKGJ1Y2tldDogdW5rbm93bikge1xuICBpZiAoIWlzU3RyaW5nKGJ1Y2tldCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGJ1Y2tldCBsZW5ndGggc2hvdWxkIGJlIGxlc3MgdGhhbiBhbmQgbm8gbW9yZSB0aGFuIDYzXG4gIC8vIGNoYXJhY3RlcnMgbG9uZy5cbiAgaWYgKGJ1Y2tldC5sZW5ndGggPCAzIHx8IGJ1Y2tldC5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIGJ1Y2tldCB3aXRoIHN1Y2Nlc3NpdmUgcGVyaW9kcyBpcyBpbnZhbGlkLlxuICBpZiAoYnVja2V0LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gYnVja2V0IGNhbm5vdCBoYXZlIGlwIGFkZHJlc3Mgc3R5bGUuXG4gIGlmICgvWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rLy50ZXN0KGJ1Y2tldCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBidWNrZXQgc2hvdWxkIGJlZ2luIHdpdGggYWxwaGFiZXQvbnVtYmVyIGFuZCBlbmQgd2l0aCBhbHBoYWJldC9udW1iZXIsXG4gIC8vIHdpdGggYWxwaGFiZXQvbnVtYmVyLy4tIGluIHRoZSBtaWRkbGUuXG4gIGlmICgvXlthLXowLTldW2EtejAtOS4tXStbYS16MC05XSQvLnRlc3QoYnVja2V0KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogY2hlY2sgaWYgb2JqZWN0TmFtZSBpcyBhIHZhbGlkIG9iamVjdCBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TmFtZShvYmplY3ROYW1lOiB1bmtub3duKSB7XG4gIGlmICghaXNWYWxpZFByZWZpeChvYmplY3ROYW1lKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdE5hbWUubGVuZ3RoICE9PSAwXG59XG5cbi8qKlxuICogY2hlY2sgaWYgcHJlZml4IGlzIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJlZml4KHByZWZpeDogdW5rbm93bik6IHByZWZpeCBpcyBzdHJpbmcge1xuICBpZiAoIWlzU3RyaW5nKHByZWZpeCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAocHJlZml4Lmxlbmd0aCA+IDEwMjQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIGNoZWNrIGlmIHR5cGVvZiBhcmcgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihhcmc6IHVua25vd24pOiBhcmcgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG5cbi8qKlxuICogY2hlY2sgaWYgdHlwZW9mIGFyZyBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihhcmc6IHVua25vd24pOiBhcmcgaXMgQW55RnVuY3Rpb24ge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vKipcbiAqIGNoZWNrIGlmIHR5cGVvZiBhcmcgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhhcmc6IHVua25vd24pOiBhcmcgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnXG59XG5cbi8qKlxuICogY2hlY2sgaWYgdHlwZW9mIGFyZyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGFyZzogdW5rbm93bik6IGFyZyBpcyBvYmplY3Qge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsXG59XG5cbi8qKlxuICogY2hlY2sgaWYgb2JqZWN0IGlzIHJlYWRhYmxlIHN0cmVhbVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShhcmc6IHVua25vd24pOiBhcmcgaXMgc3RyZWFtLlJlYWRhYmxlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICByZXR1cm4gaXNPYmplY3QoYXJnKSAmJiBpc0Z1bmN0aW9uKChhcmcgYXMgc3RyZWFtLlJlYWRhYmxlKS5fcmVhZClcbn1cblxuLyoqXG4gKiBjaGVjayBpZiBhcmcgaXMgYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKGFyZzogdW5rbm93bik6IGFyZyBpcyBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShvOiB1bmtub3duKTogbyBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIF8uaXNFbXB0eShvKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhvKS5maWx0ZXIoKHgpID0+IHggIT09IHVuZGVmaW5lZCkubGVuZ3RoICE9PSAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQ8VD4obzogVCk6IG8gaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiBvICE9PSBudWxsICYmIG8gIT09IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIGNoZWNrIGlmIGFyZyBpcyBhIHZhbGlkIGRhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREYXRlKGFyZzogdW5rbm93bik6IGFyZyBpcyBEYXRlIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBjaGVja25ldyBEYXRlKE1hdGguTmFOKVxuICByZXR1cm4gYXJnIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oYXJnKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIERhdGUgc3RyaW5nIHdpdGggZm9ybWF0OiAnWVlZWU1NRERUSEhtbXNzJyArIFpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VEYXRlTG9uZyhkYXRlPzogRGF0ZSk6IHN0cmluZyB7XG4gIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlKClcblxuICAvLyBHaXZlcyBmb3JtYXQgbGlrZTogJzIwMTctMDgtMDdUMTY6Mjg6NTkuODg5WidcbiAgY29uc3QgcyA9IGRhdGUudG9JU09TdHJpbmcoKVxuXG4gIHJldHVybiBzLnNsaWNlKDAsIDQpICsgcy5zbGljZSg1LCA3KSArIHMuc2xpY2UoOCwgMTMpICsgcy5zbGljZSgxNCwgMTYpICsgcy5zbGljZSgxNywgMTkpICsgJ1onXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgRGF0ZSBzdHJpbmcgd2l0aCBmb3JtYXQ6ICdZWVlZTU1ERCdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VEYXRlU2hvcnQoZGF0ZT86IERhdGUpIHtcbiAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKVxuXG4gIC8vIEdpdmVzIGZvcm1hdCBsaWtlOiAnMjAxNy0wOC0wN1QxNjoyODo1OS44ODlaJ1xuICBjb25zdCBzID0gZGF0ZS50b0lTT1N0cmluZygpXG5cbiAgcmV0dXJuIHMuc2xpY2UoMCwgNCkgKyBzLnNsaWNlKDUsIDcpICsgcy5zbGljZSg4LCAxMClcbn1cblxuLyoqXG4gKiBwaXBlc2V0dXAgc2V0cyB1cCBwaXBlKCkgZnJvbSBsZWZ0IHRvIHJpZ2h0IG9zIHN0cmVhbXMgYXJyYXlcbiAqIHBpcGVzZXR1cCB3aWxsIGFsc28gbWFrZSBzdXJlIHRoYXQgZXJyb3IgZW1pdHRlZCBhdCBhbnkgb2YgdGhlIHVwc3RyZWFtIFN0cmVhbVxuICogd2lsbCBiZSBlbWl0dGVkIGF0IHRoZSBsYXN0IHN0cmVhbS4gVGhpcyBtYWtlcyBlcnJvciBoYW5kbGluZyBzaW1wbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGVzZXR1cCguLi5zdHJlYW1zOiBbc3RyZWFtLlJlYWRhYmxlLCAuLi5zdHJlYW0uRHVwbGV4W10sIHN0cmVhbS5Xcml0YWJsZV0pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cyBjYW4ndCBuYXJyb3cgdGhpc1xuICByZXR1cm4gc3RyZWFtcy5yZWR1Y2UoKHNyYzogc3RyZWFtLlJlYWRhYmxlLCBkc3Q6IHN0cmVhbS5Xcml0YWJsZSkgPT4ge1xuICAgIHNyYy5vbignZXJyb3InLCAoZXJyKSA9PiBkc3QuZW1pdCgnZXJyb3InLCBlcnIpKVxuICAgIHJldHVybiBzcmMucGlwZShkc3QpXG4gIH0pXG59XG5cbi8qKlxuICogcmV0dXJuIGEgUmVhZGFibGUgc3RyZWFtIHRoYXQgZW1pdHMgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW0oZGF0YTogdW5rbm93bik6IHN0cmVhbS5SZWFkYWJsZSB7XG4gIGNvbnN0IHMgPSBuZXcgc3RyZWFtLlJlYWRhYmxlKClcbiAgcy5fcmVhZCA9ICgpID0+IHt9XG4gIHMucHVzaChkYXRhKVxuICBzLnB1c2gobnVsbClcbiAgcmV0dXJuIHNcbn1cblxuLyoqXG4gKiBQcm9jZXNzIG1ldGFkYXRhIHRvIGluc2VydCBhcHByb3ByaWF0ZSB2YWx1ZSB0byBgY29udGVudC10eXBlYCBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydENvbnRlbnRUeXBlKG1ldGFEYXRhOiBPYmplY3RNZXRhRGF0YSwgZmlsZVBhdGg6IHN0cmluZyk6IE9iamVjdE1ldGFEYXRhIHtcbiAgLy8gY2hlY2sgaWYgY29udGVudC10eXBlIGF0dHJpYnV0ZSBwcmVzZW50IGluIG1ldGFEYXRhXG4gIGZvciAoY29uc3Qga2V5IGluIG1ldGFEYXRhKSB7XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgcmV0dXJuIG1ldGFEYXRhXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgYGNvbnRlbnQtdHlwZWAgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50IGluIG1ldGFkYXRhLCB0aGVuIGluZmVyIGl0IGZyb20gdGhlIGV4dGVuc2lvbiBpbiBmaWxlUGF0aFxuICByZXR1cm4ge1xuICAgIC4uLm1ldGFEYXRhLFxuICAgICdjb250ZW50LXR5cGUnOiBwcm9iZUNvbnRlbnRUeXBlKGZpbGVQYXRoKSxcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHByZXBlbmRzIG1ldGFkYXRhIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByZWZpeCBpZiBpdCBpcyBub3QgYWxyZWFkeSBvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGVuZFhBTVpNZXRhKG1ldGFEYXRhPzogT2JqZWN0TWV0YURhdGEpOiBSZXF1ZXN0SGVhZGVycyB7XG4gIGlmICghbWV0YURhdGEpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHJldHVybiBfLm1hcEtleXMobWV0YURhdGEsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKGlzQW16SGVhZGVyKGtleSkgfHwgaXNTdXBwb3J0ZWRIZWFkZXIoa2V5KSB8fCBpc1N0b3JhZ2VDbGFzc0hlYWRlcihrZXkpKSB7XG4gICAgICByZXR1cm4ga2V5XG4gICAgfVxuXG4gICAgcmV0dXJuIE1ldGFEYXRhSGVhZGVyUHJlZml4ICsga2V5XG4gIH0pXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGl0IGlzIGEgdmFsaWQgaGVhZGVyIGFjY29yZGluZyB0byB0aGUgQW1hem9uUzMgQVBJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FtekhlYWRlcihrZXk6IHN0cmluZykge1xuICBjb25zdCB0ZW1wID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIChcbiAgICB0ZW1wLnN0YXJ0c1dpdGgoTWV0YURhdGFIZWFkZXJQcmVmaXgpIHx8XG4gICAgdGVtcCA9PT0gJ3gtYW16LWFjbCcgfHxcbiAgICB0ZW1wLnN0YXJ0c1dpdGgoJ3gtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24tJykgfHxcbiAgICB0ZW1wID09PSAneC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbidcbiAgKVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBpdCBpcyBhIHN1cHBvcnRlZCBIZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwcG9ydGVkSGVhZGVyKGtleTogc3RyaW5nKSB7XG4gIGNvbnN0IHN1cHBvcnRlZF9oZWFkZXJzID0gW1xuICAgICdjb250ZW50LXR5cGUnLFxuICAgICdjYWNoZS1jb250cm9sJyxcbiAgICAnY29udGVudC1lbmNvZGluZycsXG4gICAgJ2NvbnRlbnQtZGlzcG9zaXRpb24nLFxuICAgICdjb250ZW50LWxhbmd1YWdlJyxcbiAgICAneC1hbXotd2Vic2l0ZS1yZWRpcmVjdC1sb2NhdGlvbicsXG4gIF1cbiAgcmV0dXJuIHN1cHBvcnRlZF9oZWFkZXJzLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBpdCBpcyBhIHN0b3JhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0b3JhZ2VDbGFzc0hlYWRlcihrZXk6IHN0cmluZykge1xuICByZXR1cm4ga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd4LWFtei1zdG9yYWdlLWNsYXNzJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1ldGFkYXRhKGhlYWRlcnM6IFJlc3BvbnNlSGVhZGVyKSB7XG4gIHJldHVybiBfLm1hcEtleXMoXG4gICAgXy5waWNrQnkoaGVhZGVycywgKHZhbHVlLCBrZXkpID0+IGlzU3VwcG9ydGVkSGVhZGVyKGtleSkgfHwgaXNTdG9yYWdlQ2xhc3NIZWFkZXIoa2V5KSB8fCBpc0FtekhlYWRlcihrZXkpKSxcbiAgICAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgbG93ZXIgPSBrZXkudG9Mb3dlckNhc2UoKVxuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoTWV0YURhdGFIZWFkZXJQcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBsb3dlci5zbGljZShNZXRhRGF0YUhlYWRlclByZWZpeC5sZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBrZXlcbiAgICB9LFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uSWQoaGVhZGVyczogUmVzcG9uc2VIZWFkZXIgPSB7fSkge1xuICByZXR1cm4gaGVhZGVyc1sneC1hbXotdmVyc2lvbi1pZCddIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVZlcnNpb25JZChoZWFkZXJzOiBSZXNwb25zZUhlYWRlciA9IHt9KSB7XG4gIHJldHVybiBoZWFkZXJzWyd4LWFtei1jb3B5LXNvdXJjZS12ZXJzaW9uLWlkJ10gfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVFVGFnKGV0YWcgPSAnJyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlcGxhY2VDaGFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnXCInOiAnJyxcbiAgICAnJnF1b3Q7JzogJycsXG4gICAgJyYjMzQ7JzogJycsXG4gICAgJyZRVU9UOyc6ICcnLFxuICAgICcmI3gwMDAyMic6ICcnLFxuICB9XG4gIHJldHVybiBldGFnLnJlcGxhY2UoL14oXCJ8JnF1b3Q7fCYjMzQ7KXwoXCJ8JnF1b3Q7fCYjMzQ7KSQvZywgKG0pID0+IHJlcGxhY2VDaGFyc1ttXSBhcyBzdHJpbmcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b01kNShwYXlsb2FkOiBCaW5hcnkpOiBzdHJpbmcge1xuICAvLyB1c2Ugc3RyaW5nIGZyb20gYnJvd3NlciBhbmQgYnVmZmVyIGZyb20gbm9kZWpzXG4gIC8vIGJyb3dzZXIgc3VwcG9ydCBpcyB0ZXN0ZWQgb25seSBhZ2FpbnN0IG1pbmlvIHNlcnZlclxuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShCdWZmZXIuZnJvbShwYXlsb2FkKSkuZGlnZXN0KCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NoYTI1NihwYXlsb2FkOiBCaW5hcnkpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShwYXlsb2FkKS5kaWdlc3QoJ2hleCcpXG59XG5cbi8qKlxuICogdG9BcnJheSByZXR1cm5zIGEgc2luZ2xlIGVsZW1lbnQgYXJyYXkgd2l0aCBwYXJhbSBiZWluZyB0aGUgZWxlbWVudCxcbiAqIGlmIHBhcmFtIGlzIGp1c3QgYSBzdHJpbmcsIGFuZCByZXR1cm5zICdwYXJhbScgYmFjayBpZiBpdCBpcyBhbiBhcnJheVxuICogU28sIGl0IG1ha2VzIHN1cmUgcGFyYW0gaXMgYWx3YXlzIGFuIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5PFQgPSB1bmtub3duPihwYXJhbTogVCB8IFRbXSk6IEFycmF5PFQ+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgIHJldHVybiBbcGFyYW1dIGFzIFRbXVxuICB9XG4gIHJldHVybiBwYXJhbVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVPYmplY3RLZXkob2JqZWN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gKyBzeW1ib2wgY2hhcmFjdGVycyBhcmUgbm90IGRlY29kZWQgYXMgc3BhY2VzIGluIEpTLiBzbyByZXBsYWNlIHRoZW0gZmlyc3QgYW5kIGRlY29kZSB0byBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0LlxuICBjb25zdCBhc1N0ck5hbWUgPSAob2JqZWN0TmFtZSA/IG9iamVjdE5hbWUudG9TdHJpbmcoKSA6ICcnKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGFzU3RyTmFtZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplU2l6ZShzaXplPzogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHNpemUgPyBOdW1iZXIucGFyc2VJbnQoc2l6ZSkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IFBBUlRfQ09OU1RSQUlOVFMgPSB7XG4gIC8vIGFic01pblBhcnRTaXplIC0gYWJzb2x1dGUgbWluaW11bSBwYXJ0IHNpemUgKDUgTWlCKVxuICBBQlNfTUlOX1BBUlRfU0laRTogMTAyNCAqIDEwMjQgKiA1LFxuICAvLyBNSU5fUEFSVF9TSVpFIC0gbWluaW11bSBwYXJ0IHNpemUgMTZNaUIgcGVyIG9iamVjdCBhZnRlciB3aGljaFxuICBNSU5fUEFSVF9TSVpFOiAxMDI0ICogMTAyNCAqIDE2LFxuICAvLyBNQVhfUEFSVFNfQ09VTlQgLSBtYXhpbXVtIG51bWJlciBvZiBwYXJ0cyBmb3IgYSBzaW5nbGUgbXVsdGlwYXJ0IHNlc3Npb24uXG4gIE1BWF9QQVJUU19DT1VOVDogMTAwMDAsXG4gIC8vIE1BWF9QQVJUX1NJWkUgLSBtYXhpbXVtIHBhcnQgc2l6ZSA1R2lCIGZvciBhIHNpbmdsZSBtdWx0aXBhcnQgdXBsb2FkXG4gIC8vIG9wZXJhdGlvbi5cbiAgTUFYX1BBUlRfU0laRTogMTAyNCAqIDEwMjQgKiAxMDI0ICogNSxcbiAgLy8gTUFYX1NJTkdMRV9QVVRfT0JKRUNUX1NJWkUgLSBtYXhpbXVtIHNpemUgNUdpQiBvZiBvYmplY3QgcGVyIFBVVFxuICAvLyBvcGVyYXRpb24uXG4gIE1BWF9TSU5HTEVfUFVUX09CSkVDVF9TSVpFOiAxMDI0ICogMTAyNCAqIDEwMjQgKiA1LFxuICAvLyBNQVhfTVVMVElQQVJUX1BVVF9PQkpFQ1RfU0laRSAtIG1heGltdW0gc2l6ZSA1VGlCIG9mIG9iamVjdCBmb3JcbiAgLy8gTXVsdGlwYXJ0IG9wZXJhdGlvbi5cbiAgTUFYX01VTFRJUEFSVF9QVVRfT0JKRUNUX1NJWkU6IDEwMjQgKiAxMDI0ICogMTAyNCAqIDEwMjQgKiA1LFxufVxuXG5jb25zdCBHRU5FUklDX1NTRV9IRUFERVIgPSAnWC1BbXotU2VydmVyLVNpZGUtRW5jcnlwdGlvbidcblxuY29uc3QgRU5DUllQVElPTl9IRUFERVJTID0ge1xuICAvLyBzc2VHZW5lcmljSGVhZGVyIGlzIHRoZSBBV1MgU1NFIGhlYWRlciB1c2VkIGZvciBTU0UtUzMgYW5kIFNTRS1LTVMuXG4gIHNzZUdlbmVyaWNIZWFkZXI6IEdFTkVSSUNfU1NFX0hFQURFUixcbiAgLy8gc3NlS21zS2V5SUQgaXMgdGhlIEFXUyBTU0UtS01TIGtleSBpZC5cbiAgc3NlS21zS2V5SUQ6IEdFTkVSSUNfU1NFX0hFQURFUiArICctQXdzLUttcy1LZXktSWQnLFxufSBhcyBjb25zdFxuXG4vKipcbiAqIFJldHVybiBFbmNyeXB0aW9uIGhlYWRlcnNcbiAqIEBwYXJhbSBlbmNDb25maWdcbiAqIEByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGtleSB2YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSB1c2VkIGluIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmNyeXB0aW9uSGVhZGVycyhlbmNDb25maWc6IEVuY3J5cHRpb24pOiBSZXF1ZXN0SGVhZGVycyB7XG4gIGNvbnN0IGVuY1R5cGUgPSBlbmNDb25maWcudHlwZVxuXG4gIGlmICghaXNFbXB0eShlbmNUeXBlKSkge1xuICAgIGlmIChlbmNUeXBlID09PSBFTkNSWVBUSU9OX1RZUEVTLlNTRUMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtFTkNSWVBUSU9OX0hFQURFUlMuc3NlR2VuZXJpY0hlYWRlcl06ICdBRVMyNTYnLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5jVHlwZSA9PT0gRU5DUllQVElPTl9UWVBFUy5LTVMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtFTkNSWVBUSU9OX0hFQURFUlMuc3NlR2VuZXJpY0hlYWRlcl06IGVuY0NvbmZpZy5TU0VBbGdvcml0aG0sXG4gICAgICAgIFtFTkNSWVBUSU9OX0hFQURFUlMuc3NlS21zS2V5SURdOiBlbmNDb25maWcuS01TTWFzdGVyS2V5SUQsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0c1JlcXVpcmVkKHNpemU6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IG1heFBhcnRTaXplID0gUEFSVF9DT05TVFJBSU5UUy5NQVhfTVVMVElQQVJUX1BVVF9PQkpFQ1RfU0laRSAvIChQQVJUX0NPTlNUUkFJTlRTLk1BWF9QQVJUU19DT1VOVCAtIDEpXG4gIGxldCByZXF1aXJlZFBhcnRTaXplID0gc2l6ZSAvIG1heFBhcnRTaXplXG4gIGlmIChzaXplICUgbWF4UGFydFNpemUgPiAwKSB7XG4gICAgcmVxdWlyZWRQYXJ0U2l6ZSsrXG4gIH1cbiAgcmVxdWlyZWRQYXJ0U2l6ZSA9IE1hdGgudHJ1bmMocmVxdWlyZWRQYXJ0U2l6ZSlcbiAgcmV0dXJuIHJlcXVpcmVkUGFydFNpemVcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGVFdmVuU3BsaXRzIC0gY29tcHV0ZXMgc3BsaXRzIGZvciBhIHNvdXJjZSBhbmQgcmV0dXJuc1xuICogc3RhcnQgYW5kIGVuZCBpbmRleCBzbGljZXMuIFNwbGl0cyBoYXBwZW4gZXZlbmx5IHRvIGJlIHN1cmUgdGhhdCBub1xuICogcGFydCBpcyBsZXNzIHRoYW4gNU1pQiwgYXMgdGhhdCBjb3VsZCBmYWlsIHRoZSBtdWx0aXBhcnQgcmVxdWVzdCBpZlxuICogaXQgaXMgbm90IHRoZSBsYXN0IHBhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVFdmVuU3BsaXRzPFQgZXh0ZW5kcyB7IFN0YXJ0PzogbnVtYmVyIH0+KFxuICBzaXplOiBudW1iZXIsXG4gIG9iakluZm86IFQsXG4pOiB7XG4gIHN0YXJ0SW5kZXg6IG51bWJlcltdXG4gIG9iakluZm86IFRcbiAgZW5kSW5kZXg6IG51bWJlcltdXG59IHwgbnVsbCB7XG4gIGlmIChzaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZXFQYXJ0cyA9IHBhcnRzUmVxdWlyZWQoc2l6ZSlcbiAgY29uc3Qgc3RhcnRJbmRleFBhcnRzOiBudW1iZXJbXSA9IFtdXG4gIGNvbnN0IGVuZEluZGV4UGFydHM6IG51bWJlcltdID0gW11cblxuICBsZXQgc3RhcnQgPSBvYmpJbmZvLlN0YXJ0XG4gIGlmIChpc0VtcHR5KHN0YXJ0KSB8fCBzdGFydCA9PT0gLTEpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBjb25zdCBkaXZpc29yVmFsdWUgPSBNYXRoLnRydW5jKHNpemUgLyByZXFQYXJ0cylcblxuICBjb25zdCByZW1pbmRlclZhbHVlID0gc2l6ZSAlIHJlcVBhcnRzXG5cbiAgbGV0IG5leHRTdGFydCA9IHN0YXJ0XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXFQYXJ0czsgaSsrKSB7XG4gICAgbGV0IGN1clBhcnRTaXplID0gZGl2aXNvclZhbHVlXG4gICAgaWYgKGkgPCByZW1pbmRlclZhbHVlKSB7XG4gICAgICBjdXJQYXJ0U2l6ZSsrXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFN0YXJ0ID0gbmV4dFN0YXJ0XG4gICAgY29uc3QgY3VycmVudEVuZCA9IGN1cnJlbnRTdGFydCArIGN1clBhcnRTaXplIC0gMVxuICAgIG5leHRTdGFydCA9IGN1cnJlbnRFbmQgKyAxXG5cbiAgICBzdGFydEluZGV4UGFydHMucHVzaChjdXJyZW50U3RhcnQpXG4gICAgZW5kSW5kZXhQYXJ0cy5wdXNoKGN1cnJlbnRFbmQpXG4gIH1cblxuICByZXR1cm4geyBzdGFydEluZGV4OiBzdGFydEluZGV4UGFydHMsIGVuZEluZGV4OiBlbmRJbmRleFBhcnRzLCBvYmpJbmZvOiBvYmpJbmZvIH1cbn1cblxuY29uc3QgZnhwID0gbmV3IFhNTFBhcnNlcigpXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYbWwoeG1sOiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCByZXN1bHQgPSBmeHAucGFyc2UoeG1sKVxuICBpZiAocmVzdWx0LkVycm9yKSB7XG4gICAgdGhyb3cgcmVzdWx0LkVycm9yXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLElBQUEsR0FBQU4sdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFNLEtBQUEsR0FBQU4sT0FBQTtBQUE0QyxTQUFBTyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMs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
/**
* get content size of object content to upload
*/
async function getContentLength(s) {
// use length property of string | Buffer
if (typeof s === 'string' || Buffer.isBuffer(s)) {
return s.length;
}
// property of `fs.ReadStream`
const filePath = s.path;
if (filePath && typeof filePath === 'string') {
const stat = await _async.fsp.lstat(filePath);
return stat.size;
}
// property of `fs.ReadStream`
const fd = s.fd;
if (fd && typeof fd === 'number') {
const stat = await (0, _async.fstat)(fd);
return stat.size;
}
return null;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJzdHJlYW0iLCJfZmFzdFhtbFBhcnNlciIsIl9pcGFkZHIiLCJfbG9kYXNoIiwibWltZSIsIl9hc3luYyIsIl90eXBlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIk1ldGFEYXRhSGVhZGVyUHJlZml4IiwiaGFzaEJpbmFyeSIsImJ1ZiIsImVuYWJsZVNIQTI1NiIsInNoYTI1NnN1bSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJtZDVzdW0iLCJlbmNvZGVBc0hleCIsImMiLCJjaGFyQ29kZUF0IiwidG9TdHJpbmciLCJ0b1VwcGVyQ2FzZSIsInVyaUVzY2FwZSIsInVyaVN0ciIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJ1cmlSZXNvdXJjZUVzY2FwZSIsInN0cmluZyIsImdldFNjb3BlIiwicmVnaW9uIiwiZGF0ZSIsInNlcnZpY2VOYW1lIiwibWFrZURhdGVTaG9ydCIsImlzQW1hem9uRW5kcG9pbnQiLCJlbmRwb2ludCIsImlzVmlydHVhbEhvc3RTdHlsZSIsInByb3RvY29sIiwiYnVja2V0IiwicGF0aFN0eWxlIiwiaW5jbHVkZXMiLCJpc1ZhbGlkSVAiLCJpcCIsImlwYWRkciIsImlzVmFsaWQiLCJpc1ZhbGlkRW5kcG9pbnQiLCJpc1ZhbGlkRG9tYWluIiwiaG9zdCIsImlzU3RyaW5nIiwibGVuZ3RoIiwic2xpY2UiLCJub25BbHBoYU51bWVyaWNzIiwiY2hhciIsInByb2JlQ29udGVudFR5cGUiLCJwYXRoIiwiY29udGVudFR5cGUiLCJsb29rdXAiLCJpc1ZhbGlkUG9ydCIsInBvcnQiLCJpc051bWJlciIsImlzVmFsaWRCdWNrZXROYW1lIiwidGVzdCIsImlzVmFsaWRPYmplY3ROYW1lIiwib2JqZWN0TmFtZSIsImlzVmFsaWRQcmVmaXgiLCJwcmVmaXgiLCJhcmciLCJpc0Z1bmN0aW9uIiwiaXNPYmplY3QiLCJpc1JlYWRhYmxlU3RyZWFtIiwiX3JlYWQiLCJpc0Jvb2xlYW4iLCJpc0VtcHR5IiwibyIsIl8iLCJpc0VtcHR5T2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwieCIsInVuZGVmaW5lZCIsImlzRGVmaW5lZCIsImlzVmFsaWREYXRlIiwiRGF0ZSIsImlzTmFOIiwibWFrZURhdGVMb25nIiwicyIsInRvSVNPU3RyaW5nIiwicGlwZXNldHVwIiwic3RyZWFtcyIsInJlZHVjZSIsInNyYyIsImRzdCIsIm9uIiwiZXJyIiwiZW1pdCIsInBpcGUiLCJyZWFkYWJsZVN0cmVhbSIsImRhdGEiLCJSZWFkYWJsZSIsInB1c2giLCJpbnNlcnRDb250ZW50VHlwZSIsIm1ldGFEYXRhIiwiZmlsZVBhdGgiLCJ0b0xvd2VyQ2FzZSIsInByZXBlbmRYQU1aTWV0YSIsIm1hcEtleXMiLCJ2YWx1ZSIsImlzQW16SGVhZGVyIiwiaXNTdXBwb3J0ZWRIZWFkZXIiLCJpc1N0b3JhZ2VDbGFzc0hlYWRlciIsInRlbXAiLCJzdGFydHNXaXRoIiwic3VwcG9ydGVkX2hlYWRlcnMiLCJleHRyYWN0TWV0YWRhdGEiLCJoZWFkZXJzIiwicGlja0J5IiwibG93ZXIiLCJnZXRWZXJzaW9uSWQiLCJnZXRTb3VyY2VWZXJzaW9uSWQiLCJzYW5pdGl6ZUVUYWciLCJldGFnIiwicmVwbGFjZUNoYXJzIiwibSIsInRvTWQ1IiwicGF5bG9hZCIsIkJ1ZmZlciIsImZyb20iLCJ0b1NoYTI1NiIsInRvQXJyYXkiLCJwYXJhbSIsIkFycmF5IiwiaXNBcnJheSIsInNhbml0aXplT2JqZWN0S2V5IiwiYXNTdHJOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwic2FuaXRpemVTaXplIiwic2l6ZSIsIk51bWJlciIsInBhcnNlSW50IiwiUEFSVF9DT05TVFJBSU5UUyIsIkFCU19NSU5fUEFSVF9TSVpFIiwiTUlOX1BBUlRfU0laRSIsIk1BWF9QQVJUU19DT1VOVCIsIk1BWF9QQVJUX1NJWkUiLCJNQVhfU0lOR0xFX1BVVF9PQkpFQ1RfU0laRSIsIk1BWF9NVUxUSVBBUlRfUFVUX09CSkVDVF9TSVpFIiwiZXhwb3J0cyIsIkdFTkVSSUNfU1NFX0hFQURFUiIsIkVOQ1JZUFRJT05fSEVBREVSUyIsInNzZUdlbmVyaWNIZWFkZXIiLCJzc2VLbXNLZXlJRCIsImdldEVuY3J5cHRpb25IZWFkZXJzIiwiZW5jQ29uZmlnIiwiZW5jVHlwZSIsInR5cGUiLCJFTkNSWVBUSU9OX1RZUEVTIiwiU1NFQyIsIktNUyIsIlNTRUFsZ29yaXRobSIsIktNU01hc3RlcktleUlEIiwicGFydHNSZXF1aXJlZCIsIm1heFBhcnRTaXplIiwicmVxdWlyZWRQYXJ0U2l6ZSIsIk1hdGgiLCJ0cnVuYyIsImNhbGN1bGF0ZUV2ZW5TcGxpdHMiLCJvYmpJbmZvIiwicmVxUGFydHMiLCJzdGFydEluZGV4UGFydHMiLCJlbmRJbmRleFBhcnRzIiwic3RhcnQiLCJTdGFydCIsImRpdmlzb3JWYWx1ZSIsInJlbWluZGVyVmFsdWUiLCJuZXh0U3RhcnQiLCJpIiwiY3VyUGFydFNpemUiLCJjdXJyZW50U3RhcnQiLCJjdXJyZW50RW5kIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiZnhwIiwiWE1MUGFyc2VyIiwicGFyc2VYbWwiLCJ4bWwiLCJyZXN1bHQiLCJwYXJzZSIsIkVycm9yIiwiZ2V0Q29udGVudExlbmd0aCIsImlzQnVmZmVyIiwic3RhdCIsImZzcCIsImxzdGF0IiwiZmQiLCJmc3RhdCJdLCJzb3VyY2VzIjpbImhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTWluSU8gSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSBNaW5JTywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nXG5pbXBvcnQgKiBhcyBzdHJlYW0gZnJvbSAnbm9kZTpzdHJlYW0nXG5cbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcidcbmltcG9ydCBpcGFkZHIgZnJvbSAnaXBhZGRyLmpzJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0ICogYXMgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBmc3AsIGZzdGF0IH0gZnJvbSAnLi9hc3luYy50cydcbmltcG9ydCB0eXBlIHsgQmluYXJ5LCBFbmNyeXB0aW9uLCBPYmplY3RNZXRhRGF0YSwgUmVxdWVzdEhlYWRlcnMsIFJlc3BvbnNlSGVhZGVyIH0gZnJvbSAnLi90eXBlLnRzJ1xuaW1wb3J0IHsgRU5DUllQVElPTl9UWVBFUyB9IGZyb20gJy4vdHlwZS50cydcblxuY29uc3QgTWV0YURhdGFIZWFkZXJQcmVmaXggPSAneC1hbXotbWV0YS0nXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQmluYXJ5KGJ1ZjogQnVmZmVyLCBlbmFibGVTSEEyNTY6IGJvb2xlYW4pIHtcbiAgbGV0IHNoYTI1NnN1bSA9ICcnXG4gIGlmIChlbmFibGVTSEEyNTYpIHtcbiAgICBzaGEyNTZzdW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZikuZGlnZXN0KCdoZXgnKVxuICB9XG4gIGNvbnN0IG1kNXN1bSA9IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoYnVmKS5kaWdlc3QoJ2Jhc2U2NCcpXG5cbiAgcmV0dXJuIHsgbWQ1c3VtLCBzaGEyNTZzdW0gfVxufVxuXG4vLyBTMyBwZXJjZW50LWVuY29kZXMgc29tZSBleHRyYSBub24tc3RhbmRhcmQgY2hhcmFjdGVycyBpbiBhIFVSSSAuIFNvIGNvbXBseSB3aXRoIFMzLlxuY29uc3QgZW5jb2RlQXNIZXggPSAoYzogc3RyaW5nKSA9PiBgJSR7Yy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWBcbmV4cG9ydCBmdW5jdGlvbiB1cmlFc2NhcGUodXJpU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHVyaVN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBlbmNvZGVBc0hleClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVyaVJlc291cmNlRXNjYXBlKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiB1cmlFc2NhcGUoc3RyaW5nKS5yZXBsYWNlKC8lMkYvZywgJy8nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NvcGUocmVnaW9uOiBzdHJpbmcsIGRhdGU6IERhdGUsIHNlcnZpY2VOYW1lID0gJ3MzJykge1xuICByZXR1cm4gYCR7bWFrZURhdGVTaG9ydChkYXRlKX0vJHtyZWdpb259LyR7c2VydmljZU5hbWV9L2F3czRfcmVxdWVzdGBcbn1cblxuLyoqXG4gKiBpc0FtYXpvbkVuZHBvaW50IC0gdHJ1ZSBpZiBlbmRwb2ludCBpcyAnczMuYW1hem9uYXdzLmNvbScgb3IgJ3MzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbidcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW1hem9uRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xuICByZXR1cm4gZW5kcG9pbnQgPT09ICdzMy5hbWF6b25hd3MuY29tJyB8fCBlbmRwb2ludCA9PT0gJ3MzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbidcbn1cblxuLyoqXG4gKiBpc1ZpcnR1YWxIb3N0U3R5bGUgLSB2ZXJpZnkgaWYgYnVja2V0IG5hbWUgaXMgc3VwcG9ydCB3aXRoIHZpcnR1YWxcbiAqIGhvc3RzLiBidWNrZXROYW1lcyB3aXRoIHBlcmlvZHMgc2hvdWxkIGJlIGFsd2F5cyB0cmVhdGVkIGFzIHBhdGhcbiAqIHN0eWxlIGlmIHRoZSBwcm90b2NvbCBpcyAnaHR0cHM6JywgdGhpcyBpcyBkdWUgdG8gU1NMIHdpbGRjYXJkXG4gKiBsaW1pdGF0aW9uLiBGb3IgYWxsIG90aGVyIGJ1Y2tldHMgYW5kIEFtYXpvbiBTMyBlbmRwb2ludCB3ZSB3aWxsXG4gKiBkZWZhdWx0IHRvIHZpcnR1YWwgaG9zdCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbEhvc3RTdHlsZShlbmRwb2ludDogc3RyaW5nLCBwcm90b2NvbDogc3RyaW5nLCBidWNrZXQ6IHN0cmluZywgcGF0aFN0eWxlOiBib29sZWFuKSB7XG4gIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgYnVja2V0LmluY2x1ZGVzKCcuJykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gaXNBbWF6b25FbmRwb2ludChlbmRwb2ludCkgfHwgIXBhdGhTdHlsZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZElQKGlwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGlwYWRkci5pc1ZhbGlkKGlwKVxufVxuXG4vKipcbiAqIEByZXR1cm5zIGlmIGVuZHBvaW50IGlzIHZhbGlkIGRvbWFpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XG4gIHJldHVybiBpc1ZhbGlkRG9tYWluKGVuZHBvaW50KSB8fCBpc1ZhbGlkSVAoZW5kcG9pbnQpXG59XG5cbi8qKlxuICogQHJldHVybnMgaWYgaW5wdXQgaG9zdCBpcyBhIHZhbGlkIGRvbWFpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREb21haW4oaG9zdDogc3RyaW5nKSB7XG4gIGlmICghaXNTdHJpbmcoaG9zdCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBTZWUgUkZDIDEwMzUsIFJGQyAzNjk2LlxuICBpZiAoaG9zdC5sZW5ndGggPT09IDAgfHwgaG9zdC5sZW5ndGggPiAyNTUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBIb3N0IGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhICctJ1xuICBpZiAoaG9zdFswXSA9PT0gJy0nIHx8IGhvc3Quc2xpY2UoLTEpID09PSAnLScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBIb3N0IGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhICdfJ1xuICBpZiAoaG9zdFswXSA9PT0gJ18nIHx8IGhvc3Quc2xpY2UoLTEpID09PSAnXycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBIb3N0IGNhbm5vdCBzdGFydCB3aXRoIGEgJy4nXG4gIGlmIChob3N0WzBdID09PSAnLicpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IG5vbkFscGhhTnVtZXJpY3MgPSAnYH4hQCMkJV4mKigpKz17fVtdfFxcXFxcIlxcJzs6Pjw/LydcbiAgLy8gQWxsIG5vbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcmUgaW52YWxpZC5cbiAgZm9yIChjb25zdCBjaGFyIG9mIG5vbkFscGhhTnVtZXJpY3MpIHtcbiAgICBpZiAoaG9zdC5pbmNsdWRlcyhjaGFyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIC8vIE5vIG5lZWQgdG8gcmVnZXhwIG1hdGNoLCBzaW5jZSB0aGUgbGlzdCBpcyBub24tZXhoYXVzdGl2ZS5cbiAgLy8gV2UgbGV0IGl0IGJlIHZhbGlkIGFuZCBmYWlsIGxhdGVyLlxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIFByb2JlcyBjb250ZW50VHlwZSB1c2luZyBmaWxlIGV4dGVuc2lvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogLy8gcmV0dXJuICdpbWFnZS9wbmcnXG4gKiBwcm9iZUNvbnRlbnRUeXBlKCdmaWxlLnBuZycpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2JlQ29udGVudFR5cGUocGF0aDogc3RyaW5nKSB7XG4gIGxldCBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHBhdGgpXG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICBjb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRUeXBlXG59XG5cbi8qKlxuICogaXMgaW5wdXQgcG9ydCB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQb3J0KHBvcnQ6IHVua25vd24pOiBwb3J0IGlzIG51bWJlciB7XG4gIC8vIHZlcmlmeSBpZiBwb3J0IGlzIGEgbnVtYmVyLlxuICBpZiAoIWlzTnVtYmVyKHBvcnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBwb3J0IGAwYCBpcyB2YWxpZCBhbmQgc3BlY2lhbCBjYXNlXG4gIHJldHVybiAwIDw9IHBvcnQgJiYgcG9ydCA8PSA2NTUzNVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJ1Y2tldE5hbWUoYnVja2V0OiB1bmtub3duKSB7XG4gIGlmICghaXNTdHJpbmcoYnVja2V0KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gYnVja2V0IGxlbmd0aCBzaG91bGQgYmUgbGVzcyB0aGFuIGFuZCBubyBtb3JlIHRoYW4gNjNcbiAgLy8gY2hhcmFjdGVycyBsb25nLlxuICBpZiAoYnVja2V0Lmxlbmd0aCA8IDMgfHwgYnVja2V0Lmxlbmd0aCA+IDYzKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gYnVja2V0IHdpdGggc3VjY2Vzc2l2ZSBwZXJpb2RzIGlzIGludmFsaWQuXG4gIGlmIChidWNrZXQuaW5jbHVkZXMoJy4uJykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICAvLyBidWNrZXQgY2Fubm90IGhhdmUgaXAgYWRkcmVzcyBzdHlsZS5cbiAgaWYgKC9bMC05XStcXC5bMC05XStcXC5bMC05XStcXC5bMC05XSsvLnRlc3QoYnVja2V0KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIGJ1Y2tldCBzaG91bGQgYmVnaW4gd2l0aCBhbHBoYWJldC9udW1iZXIgYW5kIGVuZCB3aXRoIGFscGhhYmV0L251bWJlcixcbiAgLy8gd2l0aCBhbHBoYWJldC9udW1iZXIvLi0gaW4gdGhlIG1pZGRsZS5cbiAgaWYgKC9eW2EtejAtOV1bYS16MC05Li1dK1thLXowLTldJC8udGVzdChidWNrZXQpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBjaGVjayBpZiBvYmplY3ROYW1lIGlzIGEgdmFsaWQgb2JqZWN0IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRPYmplY3ROYW1lKG9iamVjdE5hbWU6IHVua25vd24pIHtcbiAgaWYgKCFpc1ZhbGlkUHJlZml4KG9iamVjdE5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gb2JqZWN0TmFtZS5sZW5ndGggIT09IDBcbn1cblxuLyoqXG4gKiBjaGVjayBpZiBwcmVmaXggaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcmVmaXgocHJlZml4OiB1bmtub3duKTogcHJlZml4IGlzIHN0cmluZyB7XG4gIGlmICghaXNTdHJpbmcocHJlZml4KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChwcmVmaXgubGVuZ3RoID4gMTAyNCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogY2hlY2sgaWYgdHlwZW9mIGFyZyBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKGFyZzogdW5rbm93bik6IGFyZyBpcyBudW1iZXIge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcidcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUZ1bmN0aW9uID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcblxuLyoqXG4gKiBjaGVjayBpZiB0eXBlb2YgYXJnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZzogdW5rbm93bik6IGFyZyBpcyBBbnlGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG59XG5cbi8qKlxuICogY2hlY2sgaWYgdHlwZW9mIGFyZyBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKGFyZzogdW5rbm93bik6IGFyZyBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZydcbn1cblxuLyoqXG4gKiBjaGVjayBpZiB0eXBlb2YgYXJnIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QoYXJnOiB1bmtub3duKTogYXJnIGlzIG9iamVjdCB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGxcbn1cblxuLyoqXG4gKiBjaGVjayBpZiBvYmplY3QgaXMgcmVhZGFibGUgc3RyZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKGFyZzogdW5rbm93bik6IGFyZyBpcyBzdHJlYW0uUmVhZGFibGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gIHJldHVybiBpc09iamVjdChhcmcpICYmIGlzRnVuY3Rpb24oKGFyZyBhcyBzdHJlYW0uUmVhZGFibGUpLl9yZWFkKVxufVxuXG4vKipcbiAqIGNoZWNrIGlmIGFyZyBpcyBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4oYXJnOiB1bmtub3duKTogYXJnIGlzIGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KG86IHVua25vd24pOiBvIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICByZXR1cm4gXy5pc0VtcHR5KG8pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKG8pLmZpbHRlcigoeCkgPT4geCAhPT0gdW5kZWZpbmVkKS5sZW5ndGggIT09IDBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZDxUPihvOiBUKTogbyBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIG8gIT09IG51bGwgJiYgbyAhPT0gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogY2hlY2sgaWYgYXJnIGlzIGEgdmFsaWQgZGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZERhdGUoYXJnOiB1bmtub3duKTogYXJnIGlzIERhdGUge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGNoZWNrbmV3IERhdGUoTWF0aC5OYU4pXG4gIHJldHVybiBhcmcgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihhcmcpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgRGF0ZSBzdHJpbmcgd2l0aCBmb3JtYXQ6ICdZWVlZTU1ERFRISG1tc3MnICsgWlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZURhdGVMb25nKGRhdGU/OiBEYXRlKTogc3RyaW5nIHtcbiAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKVxuXG4gIC8vIEdpdmVzIGZvcm1hdCBsaWtlOiAnMjAxNy0wOC0wN1QxNjoyODo1OS44ODlaJ1xuICBjb25zdCBzID0gZGF0ZS50b0lTT1N0cmluZygpXG5cbiAgcmV0dXJuIHMuc2xpY2UoMCwgNCkgKyBzLnNsaWNlKDUsIDcpICsgcy5zbGljZSg4LCAxMykgKyBzLnNsaWNlKDE0LCAxNikgKyBzLnNsaWNlKDE3LCAxOSkgKyAnWidcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBEYXRlIHN0cmluZyB3aXRoIGZvcm1hdDogJ1lZWVlNTUREJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZURhdGVTaG9ydChkYXRlPzogRGF0ZSkge1xuICBkYXRlID0gZGF0ZSB8fCBuZXcgRGF0ZSgpXG5cbiAgLy8gR2l2ZXMgZm9ybWF0IGxpa2U6ICcyMDE3LTA4LTA3VDE2OjI4OjU5Ljg4OVonXG4gIGNvbnN0IHMgPSBkYXRlLnRvSVNPU3RyaW5nKClcblxuICByZXR1cm4gcy5zbGljZSgwLCA0KSArIHMuc2xpY2UoNSwgNykgKyBzLnNsaWNlKDgsIDEwKVxufVxuXG4vKipcbiAqIHBpcGVzZXR1cCBzZXRzIHVwIHBpcGUoKSBmcm9tIGxlZnQgdG8gcmlnaHQgb3Mgc3RyZWFtcyBhcnJheVxuICogcGlwZXNldHVwIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCBlcnJvciBlbWl0dGVkIGF0IGFueSBvZiB0aGUgdXBzdHJlYW0gU3RyZWFtXG4gKiB3aWxsIGJlIGVtaXR0ZWQgYXQgdGhlIGxhc3Qgc3RyZWFtLiBUaGlzIG1ha2VzIGVycm9yIGhhbmRsaW5nIHNpbXBsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlwZXNldHVwKC4uLnN0cmVhbXM6IFtzdHJlYW0uUmVhZGFibGUsIC4uLnN0cmVhbS5EdXBsZXhbXSwgc3RyZWFtLldyaXRhYmxlXSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRzIGNhbid0IG5hcnJvdyB0aGlzXG4gIHJldHVybiBzdHJlYW1zLnJlZHVjZSgoc3JjOiBzdHJlYW0uUmVhZGFibGUsIGRzdDogc3RyZWFtLldyaXRhYmxlKSA9PiB7XG4gICAgc3JjLm9uKCdlcnJvcicsIChlcnIpID0+IGRzdC5lbWl0KCdlcnJvcicsIGVycikpXG4gICAgcmV0dXJuIHNyYy5waXBlKGRzdClcbiAgfSlcbn1cblxuLyoqXG4gKiByZXR1cm4gYSBSZWFkYWJsZSBzdHJlYW0gdGhhdCBlbWl0cyBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbShkYXRhOiB1bmtub3duKTogc3RyZWFtLlJlYWRhYmxlIHtcbiAgY29uc3QgcyA9IG5ldyBzdHJlYW0uUmVhZGFibGUoKVxuICBzLl9yZWFkID0gKCkgPT4ge31cbiAgcy5wdXNoKGRhdGEpXG4gIHMucHVzaChudWxsKVxuICByZXR1cm4gc1xufVxuXG4vKipcbiAqIFByb2Nlc3MgbWV0YWRhdGEgdG8gaW5zZXJ0IGFwcHJvcHJpYXRlIHZhbHVlIHRvIGBjb250ZW50LXR5cGVgIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29udGVudFR5cGUobWV0YURhdGE6IE9iamVjdE1ldGFEYXRhLCBmaWxlUGF0aDogc3RyaW5nKTogT2JqZWN0TWV0YURhdGEge1xuICAvLyBjaGVjayBpZiBjb250ZW50LXR5cGUgYXR0cmlidXRlIHByZXNlbnQgaW4gbWV0YURhdGFcbiAgZm9yIChjb25zdCBrZXkgaW4gbWV0YURhdGEpIHtcbiAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICByZXR1cm4gbWV0YURhdGFcbiAgICB9XG4gIH1cblxuICAvLyBpZiBgY29udGVudC10eXBlYCBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQgaW4gbWV0YWRhdGEsIHRoZW4gaW5mZXIgaXQgZnJvbSB0aGUgZXh0ZW5zaW9uIGluIGZpbGVQYXRoXG4gIHJldHVybiB7XG4gICAgLi4ubWV0YURhdGEsXG4gICAgJ2NvbnRlbnQtdHlwZSc6IHByb2JlQ29udGVudFR5cGUoZmlsZVBhdGgpLFxuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gcHJlcGVuZHMgbWV0YWRhdGEgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcHJlZml4IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwZW5kWEFNWk1ldGEobWV0YURhdGE/OiBPYmplY3RNZXRhRGF0YSk6IFJlcXVlc3RIZWFkZXJzIHtcbiAgaWYgKCFtZXRhRGF0YSkge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgcmV0dXJuIF8ubWFwS2V5cyhtZXRhRGF0YSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAoaXNBbXpIZWFkZXIoa2V5KSB8fCBpc1N1cHBvcnRlZEhlYWRlcihrZXkpIHx8IGlzU3RvcmFnZUNsYXNzSGVhZGVyKGtleSkpIHtcbiAgICAgIHJldHVybiBrZXlcbiAgICB9XG5cbiAgICByZXR1cm4gTWV0YURhdGFIZWFkZXJQcmVmaXggKyBrZXlcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgaXQgaXMgYSB2YWxpZCBoZWFkZXIgYWNjb3JkaW5nIHRvIHRoZSBBbWF6b25TMyBBUElcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW16SGVhZGVyKGtleTogc3RyaW5nKSB7XG4gIGNvbnN0IHRlbXAgPSBrZXkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gKFxuICAgIHRlbXAuc3RhcnRzV2l0aChNZXRhRGF0YUhlYWRlclByZWZpeCkgfHxcbiAgICB0ZW1wID09PSAneC1hbXotYWNsJyB8fFxuICAgIHRlbXAuc3RhcnRzV2l0aCgneC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbi0nKSB8fFxuICAgIHRlbXAgPT09ICd4LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGl0IGlzIGEgc3VwcG9ydGVkIEhlYWRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBwb3J0ZWRIZWFkZXIoa2V5OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3VwcG9ydGVkX2hlYWRlcnMgPSBbXG4gICAgJ2NvbnRlbnQtdHlwZScsXG4gICAgJ2NhY2hlLWNvbnRyb2wnLFxuICAgICdjb250ZW50LWVuY29kaW5nJyxcbiAgICAnY29udGVudC1kaXNwb3NpdGlvbicsXG4gICAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAgICd4LWFtei13ZWJzaXRlLXJlZGlyZWN0LWxvY2F0aW9uJyxcbiAgXVxuICByZXR1cm4gc3VwcG9ydGVkX2hlYWRlcnMuaW5jbHVkZXMoa2V5LnRvTG93ZXJDYXNlKCkpXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGl0IGlzIGEgc3RvcmFnZSBoZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RvcmFnZUNsYXNzSGVhZGVyKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gtYW16LXN0b3JhZ2UtY2xhc3MnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TWV0YWRhdGEoaGVhZGVyczogUmVzcG9uc2VIZWFkZXIpIHtcbiAgcmV0dXJuIF8ubWFwS2V5cyhcbiAgICBfLnBpY2tCeShoZWFkZXJzLCAodmFsdWUsIGtleSkgPT4gaXNTdXBwb3J0ZWRIZWFkZXIoa2V5KSB8fCBpc1N0b3JhZ2VDbGFzc0hlYWRlcihrZXkpIHx8IGlzQW16SGVhZGVyKGtleSkpLFxuICAgICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBsb3dlciA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChNZXRhRGF0YUhlYWRlclByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIGxvd2VyLnNsaWNlKE1ldGFEYXRhSGVhZGVyUHJlZml4Lmxlbmd0aClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGtleVxuICAgIH0sXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb25JZChoZWFkZXJzOiBSZXNwb25zZUhlYWRlciA9IHt9KSB7XG4gIHJldHVybiBoZWFkZXJzWyd4LWFtei12ZXJzaW9uLWlkJ10gfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVmVyc2lvbklkKGhlYWRlcnM6IFJlc3BvbnNlSGVhZGVyID0ge30pIHtcbiAgcmV0dXJuIGhlYWRlcnNbJ3gtYW16LWNvcHktc291cmNlLXZlcnNpb24taWQnXSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUVUYWcoZXRhZyA9ICcnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVwbGFjZUNoYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICdcIic6ICcnLFxuICAgICcmcXVvdDsnOiAnJyxcbiAgICAnJiMzNDsnOiAnJyxcbiAgICAnJlFVT1Q7JzogJycsXG4gICAgJyYjeDAwMDIyJzogJycsXG4gIH1cbiAgcmV0dXJuIGV0YWcucmVwbGFjZSgvXihcInwmcXVvdDt8JiMzNDspfChcInwmcXVvdDt8JiMzNDspJC9nLCAobSkgPT4gcmVwbGFjZUNoYXJzW21dIGFzIHN0cmluZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWQ1KHBheWxvYWQ6IEJpbmFyeSk6IHN0cmluZyB7XG4gIC8vIHVzZSBzdHJpbmcgZnJvbSBicm93c2VyIGFuZCBidWZmZXIgZnJvbSBub2RlanNcbiAgLy8gYnJvd3NlciBzdXBwb3J0IGlzIHRlc3RlZCBvbmx5IGFnYWluc3QgbWluaW8gc2VydmVyXG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKEJ1ZmZlci5mcm9tKHBheWxvYWQpKS5kaWdlc3QoKS50b1N0cmluZygnYmFzZTY0Jylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hhMjU2KHBheWxvYWQ6IEJpbmFyeSk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHBheWxvYWQpLmRpZ2VzdCgnaGV4Jylcbn1cblxuLyoqXG4gKiB0b0FycmF5IHJldHVybnMgYSBzaW5nbGUgZWxlbWVudCBhcnJheSB3aXRoIHBhcmFtIGJlaW5nIHRoZSBlbGVtZW50LFxuICogaWYgcGFyYW0gaXMganVzdCBhIHN0cmluZywgYW5kIHJldHVybnMgJ3BhcmFtJyBiYWNrIGlmIGl0IGlzIGFuIGFycmF5XG4gKiBTbywgaXQgbWFrZXMgc3VyZSBwYXJhbSBpcyBhbHdheXMgYW4gYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXk8VCA9IHVua25vd24+KHBhcmFtOiBUIHwgVFtdKTogQXJyYXk8VD4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgcmV0dXJuIFtwYXJhbV0gYXMgVFtdXG4gIH1cbiAgcmV0dXJuIHBhcmFtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZU9iamVjdEtleShvYmplY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyArIHN5bWJvbCBjaGFyYWN0ZXJzIGFyZSBub3QgZGVjb2RlZCBhcyBzcGFjZXMgaW4gSlMuIHNvIHJlcGxhY2UgdGhlbSBmaXJzdCBhbmQgZGVjb2RlIHRvIGdldCB0aGUgY29ycmVjdCByZXN1bHQuXG4gIGNvbnN0IGFzU3RyTmFtZSA9IChvYmplY3ROYW1lID8gb2JqZWN0TmFtZS50b1N0cmluZygpIDogJycpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXNTdHJOYW1lKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVTaXplKHNpemU/OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc2l6ZSA/IE51bWJlci5wYXJzZUludChzaXplKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgUEFSVF9DT05TVFJBSU5UUyA9IHtcbiAgLy8gYWJzTWluUGFydFNpemUgLSBhYnNvbHV0ZSBtaW5pbXVtIHBhcnQgc2l6ZSAoNSBNaUIpXG4gIEFCU19NSU5fUEFSVF9TSVpFOiAxMDI0ICogMTAyNCAqIDUsXG4gIC8vIE1JTl9QQVJUX1NJWkUgLSBtaW5pbXVtIHBhcnQgc2l6ZSAxNk1pQiBwZXIgb2JqZWN0IGFmdGVyIHdoaWNoXG4gIE1JTl9QQVJUX1NJWkU6IDEwMjQgKiAxMDI0ICogMTYsXG4gIC8vIE1BWF9QQVJUU19DT1VOVCAtIG1heGltdW0gbnVtYmVyIG9mIHBhcnRzIGZvciBhIHNpbmdsZSBtdWx0aXBhcnQgc2Vzc2lvbi5cbiAgTUFYX1BBUlRTX0NPVU5UOiAxMDAwMCxcbiAgLy8gTUFYX1BBUlRfU0laRSAtIG1heGltdW0gcGFydCBzaXplIDVHaUIgZm9yIGEgc2luZ2xlIG11bHRpcGFydCB1cGxvYWRcbiAgLy8gb3BlcmF0aW9uLlxuICBNQVhfUEFSVF9TSVpFOiAxMDI0ICogMTAyNCAqIDEwMjQgKiA1LFxuICAvLyBNQVhfU0lOR0xFX1BVVF9PQkpFQ1RfU0laRSAtIG1heGltdW0gc2l6ZSA1R2lCIG9mIG9iamVjdCBwZXIgUFVUXG4gIC8vIG9wZXJhdGlvbi5cbiAgTUFYX1NJTkdMRV9QVVRfT0JKRUNUX1NJWkU6IDEwMjQgKiAxMDI0ICogMTAyNCAqIDUsXG4gIC8vIE1BWF9NVUxUSVBBUlRfUFVUX09CSkVDVF9TSVpFIC0gbWF4aW11bSBzaXplIDVUaUIgb2Ygb2JqZWN0IGZvclxuICAvLyBNdWx0aXBhcnQgb3BlcmF0aW9uLlxuICBNQVhfTVVMVElQQVJUX1BVVF9PQkpFQ1RfU0laRTogMTAyNCAqIDEwMjQgKiAxMDI0ICogMTAyNCAqIDUsXG59XG5cbmNvbnN0IEdFTkVSSUNfU1NFX0hFQURFUiA9ICdYLUFtei1TZXJ2ZXItU2lkZS1FbmNyeXB0aW9uJ1xuXG5jb25zdCBFTkNSWVBUSU9OX0hFQURFUlMgPSB7XG4gIC8vIHNzZUdlbmVyaWNIZWFkZXIgaXMgdGhlIEFXUyBTU0UgaGVhZGVyIHVzZWQgZm9yIFNTRS1TMyBhbmQgU1NFLUtNUy5cbiAgc3NlR2VuZXJpY0hlYWRlcjogR0VORVJJQ19TU0VfSEVBREVSLFxuICAvLyBzc2VLbXNLZXlJRCBpcyB0aGUgQVdTIFNTRS1LTVMga2V5IGlkLlxuICBzc2VLbXNLZXlJRDogR0VORVJJQ19TU0VfSEVBREVSICsgJy1Bd3MtS21zLUtleS1JZCcsXG59IGFzIGNvbnN0XG5cbi8qKlxuICogUmV0dXJuIEVuY3J5cHRpb24gaGVhZGVyc1xuICogQHBhcmFtIGVuY0NvbmZpZ1xuICogQHJldHVybnMgYW4gb2JqZWN0IHdpdGgga2V5IHZhbHVlIHBhaXJzIHRoYXQgY2FuIGJlIHVzZWQgaW4gaGVhZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuY3J5cHRpb25IZWFkZXJzKGVuY0NvbmZpZzogRW5jcnlwdGlvbik6IFJlcXVlc3RIZWFkZXJzIHtcbiAgY29uc3QgZW5jVHlwZSA9IGVuY0NvbmZpZy50eXBlXG5cbiAgaWYgKCFpc0VtcHR5KGVuY1R5cGUpKSB7XG4gICAgaWYgKGVuY1R5cGUgPT09IEVOQ1JZUFRJT05fVFlQRVMuU1NFQykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW0VOQ1JZUFRJT05fSEVBREVSUy5zc2VHZW5lcmljSGVhZGVyXTogJ0FFUzI1NicsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmNUeXBlID09PSBFTkNSWVBUSU9OX1RZUEVTLktNUykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW0VOQ1JZUFRJT05fSEVBREVSUy5zc2VHZW5lcmljSGVhZGVyXTogZW5jQ29uZmlnLlNTRUFsZ29yaXRobSxcbiAgICAgICAgW0VOQ1JZUFRJT05fSEVBREVSUy5zc2VLbXNLZXlJRF06IGVuY0NvbmZpZy5LTVNNYXN0ZXJLZXlJRCxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRzUmVxdWlyZWQoc2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbWF4UGFydFNpemUgPSBQQVJUX0NPTlNUUkFJTlRTLk1BWF9NVUxUSVBBUlRfUFVUX09CSkVDVF9TSVpFIC8gKFBBUlRfQ09OU1RSQUlOVFMuTUFYX1BBUlRTX0NPVU5UIC0gMSlcbiAgbGV0IHJlcXVpcmVkUGFydFNpemUgPSBzaXplIC8gbWF4UGFydFNpemVcbiAgaWYgKHNpemUgJSBtYXhQYXJ0U2l6ZSA+IDApIHtcbiAgICByZXF1aXJlZFBhcnRTaXplKytcbiAgfVxuICByZXF1aXJlZFBhcnRTaXplID0gTWF0aC50cnVuYyhyZXF1aXJlZFBhcnRTaXplKVxuICByZXR1cm4gcmVxdWlyZWRQYXJ0U2l6ZVxufVxuXG4vKipcbiAqIGNhbGN1bGF0ZUV2ZW5TcGxpdHMgLSBjb21wdXRlcyBzcGxpdHMgZm9yIGEgc291cmNlIGFuZCByZXR1cm5zXG4gKiBzdGFydCBhbmQgZW5kIGluZGV4IHNsaWNlcy4gU3BsaXRzIGhhcHBlbiBldmVubHkgdG8gYmUgc3VyZSB0aGF0IG5vXG4gKiBwYXJ0IGlzIGxlc3MgdGhhbiA1TWlCLCBhcyB0aGF0IGNvdWxkIGZhaWwgdGhlIG11bHRpcGFydCByZXF1ZXN0IGlmXG4gKiBpdCBpcyBub3QgdGhlIGxhc3QgcGFydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV2ZW5TcGxpdHM8VCBleHRlbmRzIHsgU3RhcnQ/OiBudW1iZXIgfT4oXG4gIHNpemU6IG51bWJlcixcbiAgb2JqSW5mbzogVCxcbik6IHtcbiAgc3RhcnRJbmRleDogbnVtYmVyW11cbiAgb2JqSW5mbzogVFxuICBlbmRJbmRleDogbnVtYmVyW11cbn0gfCBudWxsIHtcbiAgaWYgKHNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlcVBhcnRzID0gcGFydHNSZXF1aXJlZChzaXplKVxuICBjb25zdCBzdGFydEluZGV4UGFydHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgZW5kSW5kZXhQYXJ0czogbnVtYmVyW10gPSBbXVxuXG4gIGxldCBzdGFydCA9IG9iakluZm8uU3RhcnRcbiAgaWYgKGlzRW1wdHkoc3RhcnQpIHx8IHN0YXJ0ID09PSAtMSkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGNvbnN0IGRpdmlzb3JWYWx1ZSA9IE1hdGgudHJ1bmMoc2l6ZSAvIHJlcVBhcnRzKVxuXG4gIGNvbnN0IHJlbWluZGVyVmFsdWUgPSBzaXplICUgcmVxUGFydHNcblxuICBsZXQgbmV4dFN0YXJ0ID0gc3RhcnRcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcVBhcnRzOyBpKyspIHtcbiAgICBsZXQgY3VyUGFydFNpemUgPSBkaXZpc29yVmFsdWVcbiAgICBpZiAoaSA8IHJlbWluZGVyVmFsdWUpIHtcbiAgICAgIGN1clBhcnRTaXplKytcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U3RhcnQgPSBuZXh0U3RhcnRcbiAgICBjb25zdCBjdXJyZW50RW5kID0gY3VycmVudFN0YXJ0ICsgY3VyUGFydFNpemUgLSAxXG4gICAgbmV4dFN0YXJ0ID0gY3VycmVudEVuZCArIDFcblxuICAgIHN0YXJ0SW5kZXhQYXJ0cy5wdXNoKGN1cnJlbnRTdGFydClcbiAgICBlbmRJbmRleFBhcnRzLnB1c2goY3VycmVudEVuZClcbiAgfVxuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXhQYXJ0cywgZW5kSW5kZXg6IGVuZEluZGV4UGFydHMsIG9iakluZm86IG9iakluZm8gfVxufVxuXG5jb25zdCBmeHAgPSBuZXcgWE1MUGFyc2VyKClcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVhtbCh4bWw6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdCA9IGZ4cC5wYXJzZSh4bWwpXG4gIGlmIChyZXN1bHQuRXJyb3IpIHtcbiAgICB0aHJvdyByZXN1bHQuRXJyb3JcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBnZXQgY29udGVudCBzaXplIG9mIG9iamVjdCBjb250ZW50IHRvIHVwbG9hZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGVudExlbmd0aChzOiBzdHJlYW0uUmVhZGFibGUgfCBCdWZmZXIgfCBzdHJpbmcpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgLy8gdXNlIGxlbmd0aCBwcm9wZXJ0eSBvZiBzdHJpbmcgfCBCdWZmZXJcbiAgaWYgKHR5cGVvZiBzID09PSAnc3RyaW5nJyB8fCBCdWZmZXIuaXNCdWZmZXIocykpIHtcbiAgICByZXR1cm4gcy5sZW5ndGhcbiAgfVxuXG4gIC8vIHByb3BlcnR5IG9mIGBmcy5SZWFkU3RyZWFtYFxuICBjb25zdCBmaWxlUGF0aCA9IChzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnBhdGggYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGlmIChmaWxlUGF0aCAmJiB0eXBlb2YgZmlsZVBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzcC5sc3RhdChmaWxlUGF0aClcbiAgICByZXR1cm4gc3RhdC5zaXplXG4gIH1cblxuICAvLyBwcm9wZXJ0eSBvZiBgZnMuUmVhZFN0cmVhbWBcbiAgY29uc3QgZmQgPSAocyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5mZCBhcyBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGlmIChmZCAmJiB0eXBlb2YgZmQgPT09ICdudW1iZXInKSB7XG4gICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZz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

@@ -6,2 +6,5 @@ /// <reference types="node" />

import type { Readable as ReadableStream } from 'node:stream';
export type VersionIdentificator = {
versionId?: string;
};
export type Binary = string | Buffer;

@@ -18,2 +21,3 @@ export type ResponseHeader = Record<string, string>;

};
export type EnabledOrDisabledStatus = 'Enabled' | 'Disabled';
export declare enum ENCRYPTION_TYPES {

@@ -106,3 +110,3 @@ /**

export type ReplicationRuleStatus = {
Status: 'Enabled' | 'Disabled';
Status: EnabledOrDisabledStatus;
};

@@ -113,2 +117,3 @@ export type Tag = {

};
export type Tags = Record<string, string>;
export type ReplicationRuleDestination = {

@@ -154,2 +159,161 @@ Bucket: string;

};
export type ResultCallback<T> = (error: Error | null, result: T) => void;
export type ResultCallback<T> = (error: Error | null, result: T) => void;
export type GetObjectLegalHoldOptions = {
versionId: string;
};
/**
* @deprecated keep for backward compatible, use `LEGAL_HOLD_STATUS` instead
*/
export type LegalHoldStatus = LEGAL_HOLD_STATUS;
export type PutObjectLegalHoldOptions = {
versionId?: string;
status: LEGAL_HOLD_STATUS;
};
export interface UploadedObjectInfo {
etag: string;
versionId: string | null;
}
export interface RetentionOptions {
versionId: string;
mode?: RETENTION_MODES;
retainUntilDate?: IsoDate;
governanceBypass?: boolean;
}
export type Retention = RetentionOptions | EmptyObject;
export type IsoDate = string;
export type EmptyObject = Record<string, never>;
export type ObjectLockInfo = {
objectLockEnabled: EnabledOrDisabledStatus;
mode: RETENTION_MODES;
unit: RETENTION_VALIDITY_UNITS;
validity: number;
} | EmptyObject;
export type ObjectLockConfigParam = {
ObjectLockEnabled?: 'Enabled' | undefined;
Rule?: {
DefaultRetention: {
Mode: RETENTION_MODES;
Days: number;
Years: number;
} | EmptyObject;
} | EmptyObject;
};
export type VersioningEnabled = 'Enabled';
export type VersioningSuspended = 'Suspended';
export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended;
};
export type TaggingOpts = {
versionId: string;
};
export type PutTaggingParams = {
bucketName: string;
objectName?: string;
tags: Tags;
putOpts?: TaggingOpts;
};
export type RemoveTaggingParams = {
bucketName: string;
objectName?: string;
removeOpts?: TaggingOpts;
};
export type InputSerialization = {
CompressionType?: 'NONE' | 'GZIP' | 'BZIP2';
CSV?: {
AllowQuotedRecordDelimiter?: boolean;
Comments?: string;
FieldDelimiter?: string;
FileHeaderInfo?: 'NONE' | 'IGNORE' | 'USE';
QuoteCharacter?: string;
QuoteEscapeCharacter?: string;
RecordDelimiter?: string;
};
JSON?: {
Type: 'DOCUMENT' | 'LINES';
};
Parquet?: EmptyObject;
};
export type OutputSerialization = {
CSV?: {
FieldDelimiter?: string;
QuoteCharacter?: string;
QuoteEscapeCharacter?: string;
QuoteFields?: string;
RecordDelimiter?: string;
};
JSON?: {
RecordDelimiter?: string;
};
};
export type SelectProgress = {
Enabled: boolean;
};
export type ScanRange = {
Start: number;
End: number;
};
export type SelectOptions = {
expression: string;
expressionType?: string;
inputSerialization: InputSerialization;
outputSerialization: OutputSerialization;
requestProgress?: SelectProgress;
scanRange?: ScanRange;
};
export type Expiration = {
Date: string;
Days: number;
DeleteMarker: boolean;
DeleteAll: boolean;
};
export type RuleFilterAnd = {
Prefix: string;
Tags: Tag[];
};
export type RuleFilter = {
And?: RuleFilterAnd;
Prefix: string;
Tag?: Tag[];
};
export type NoncurrentVersionExpiration = {
NoncurrentDays: number;
NewerNoncurrentVersions?: number;
};
export type NoncurrentVersionTransition = {
StorageClass: string;
NoncurrentDays?: number;
NewerNoncurrentVersions?: number;
};
export type Transition = {
Date?: string;
StorageClass: string;
Days: number;
};
export type AbortIncompleteMultipartUpload = {
DaysAfterInitiation: number;
};
export type LifecycleRule = {
AbortIncompleteMultipartUpload?: AbortIncompleteMultipartUpload;
ID: string;
Prefix?: string;
Status?: string;
Expiration?: Expiration;
RuleFilter?: RuleFilter;
NoncurrentVersionExpiration?: NoncurrentVersionExpiration;
NoncurrentVersionTransition?: NoncurrentVersionTransition;
Transition?: Transition;
};
export type LifecycleConfig = {
Rule: LifecycleRule[];
};
export type LifeCycleConfigParam = LifecycleConfig | null | undefined | '';
export type ApplySSEByDefault = {
KmsMasterKeyID?: string;
SSEAlgorithm: string;
};
export type EncryptionRule = {
ApplyServerSideEncryptionByDefault?: ApplySSEByDefault;
};
export type EncryptionConfig = {
Rule: EncryptionRule[];
};

@@ -32,3 +32,6 @@ "use strict";

/* Replication Config types */
/**
* @deprecated keep for backward compatible, use `LEGAL_HOLD_STATUS` instead
*/
exports.LEGAL_HOLD_STATUS = LEGAL_HOLD_STATUS;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFTkNSWVBUSU9OX1RZUEVTIiwiZXhwb3J0cyIsIlJFVEVOVElPTl9NT0RFUyIsIlJFVEVOVElPTl9WQUxJRElUWV9VTklUUyIsIkxFR0FMX0hPTERfU1RBVFVTIl0sInNvdXJjZXMiOlsidHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGh0dHAgZnJvbSAnbm9kZTpodHRwJ1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gJ25vZGU6c3RyZWFtJ1xuXG5leHBvcnQgdHlwZSBCaW5hcnkgPSBzdHJpbmcgfCBCdWZmZXJcblxuLy8gbm9kZWpzIEluY29taW5nSHR0cEhlYWRlcnMgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+LCBidXQgaXQncyBhY3R1YWxseSB0aGlzOlxuZXhwb3J0IHR5cGUgUmVzcG9uc2VIZWFkZXIgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbmV4cG9ydCB0eXBlIE9iamVjdE1ldGFEYXRhID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0SGVhZGVycyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCB1bmRlZmluZWQ+XG5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IEVOQ1JZUFRJT05fVFlQRVMuU1NFQ1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBFTkNSWVBUSU9OX1RZUEVTLktNU1xuICAgICAgU1NFQWxnb3JpdGhtPzogc3RyaW5nXG4gICAgICBLTVNNYXN0ZXJLZXlJRD86IHN0cmluZ1xuICAgIH1cblxuZXhwb3J0IGVudW0gRU5DUllQVElPTl9UWVBFUyB7XG4gIC8qKlxuICAgKiBTU0VDIHJlcHJlc2VudHMgc2VydmVyLXNpZGUtZW5jcnlwdGlvbiB3aXRoIGN1c3RvbWVyIHByb3ZpZGVkIGtleXNcbiAgICovXG4gIFNTRUMgPSAnU1NFLUMnLFxuICAvKipcbiAgICogS01TIHJlcHJlc2VudHMgc2VydmVyLXNpZGUtZW5jcnlwdGlvbiB3aXRoIG1hbmFnZWQga2V5c1xuICAgKi9cbiAgS01TID0gJ0tNUycsXG59XG5cbmV4cG9ydCBlbnVtIFJFVEVOVElPTl9NT0RFUyB7XG4gIEdPVkVSTkFOQ0UgPSAnR09WRVJOQU5DRScsXG4gIENPTVBMSUFOQ0UgPSAnQ09NUExJQU5DRScsXG59XG5cbmV4cG9ydCBlbnVtIFJFVEVOVElPTl9WQUxJRElUWV9VTklUUyB7XG4gIERBWVMgPSAnRGF5cycsXG4gIFlFQVJTID0gJ1llYXJzJyxcbn1cblxuZXhwb3J0IGVudW0gTEVHQUxfSE9MRF9TVEFUVVMge1xuICBFTkFCTEVEID0gJ09OJyxcbiAgRElTQUJMRUQgPSAnT0ZGJyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNwb3J0ID0gUGljazx0eXBlb2YgaHR0cCwgJ3JlcXVlc3QnPlxuXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0IHtcbiAgcHJvdG9jb2w6IHN0cmluZ1xuICBwb3J0PzogbnVtYmVyIHwgc3RyaW5nXG4gIG1ldGhvZDogc3RyaW5nXG4gIHBhdGg6IHN0cmluZ1xuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVyc1xufVxuXG5leHBvcnQgdHlwZSBJQ2Fub25pY2FsUmVxdWVzdCA9IHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIEluY29tcGxldGVVcGxvYWRlZEJ1Y2tldEl0ZW0ge1xuICBrZXk6IHN0cmluZ1xuICB1cGxvYWRJZDogc3RyaW5nXG4gIHNpemU6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhSXRlbSB7XG4gIEtleTogc3RyaW5nXG4gIFZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJdGVtQnVja2V0TWV0YWRhdGFMaXN0IHtcbiAgSXRlbXM6IE1ldGFkYXRhSXRlbVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUJ1Y2tldE1ldGFkYXRhIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0SXRlbUZyb21MaXN0IHtcbiAgbmFtZTogc3RyaW5nXG4gIGNyZWF0aW9uRGF0ZTogRGF0ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEl0ZW1Db3B5IHtcbiAgZXRhZzogc3RyaW5nXG4gIGxhc3RNb2RpZmllZDogRGF0ZVxufVxuXG5leHBvcnQgdHlwZSBCdWNrZXRJdGVtID1cbiAgfCB7XG4gICAgICBuYW1lOiBzdHJpbmdcbiAgICAgIHNpemU6IG51bWJlclxuICAgICAgZXRhZzogc3RyaW5nXG4gICAgICBwcmVmaXg/OiBuZXZlclxuICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlXG4gICAgfVxuICB8IHtcbiAgICAgIG5hbWU/OiBuZXZlclxuICAgICAgZXRhZz86IG5ldmVyXG4gICAgICBsYXN0TW9kaWZpZWQ/OiBuZXZlclxuICAgICAgcHJlZml4OiBzdHJpbmdcbiAgICAgIHNpemU6IDBcbiAgICB9XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldEl0ZW1XaXRoTWV0YWRhdGEgPSBCdWNrZXRJdGVtICYge1xuICBtZXRhZGF0YT86IEl0ZW1CdWNrZXRNZXRhZGF0YSB8IEl0ZW1CdWNrZXRNZXRhZGF0YUxpc3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTdHJlYW08VD4gZXh0ZW5kcyBSZWFkYWJsZVN0cmVhbSB7XG4gIG9uKGV2ZW50OiAnZGF0YScsIGxpc3RlbmVyOiAoaXRlbTogVCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ2VuZCcgfCAncGF1c2UnIHwgJ3JlYWRhYmxlJyB8ICdyZXN1bWUnIHwgJ2Nsb3NlJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdlcnJvcicsIGxpc3RlbmVyOiAoZXJyOiBFcnJvcikgPT4gdm9pZCk6IHRoaXNcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBvbihldmVudDogc3RyaW5nIHwgc3ltYm9sLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdGhpc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEl0ZW1TdGF0IHtcbiAgc2l6ZTogbnVtYmVyXG4gIGV0YWc6IHN0cmluZ1xuICBsYXN0TW9kaWZpZWQ6IERhdGVcbiAgbWV0YURhdGE6IEl0ZW1CdWNrZXRNZXRhZGF0YVxuICB2ZXJzaW9uSWQ/OiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFN0YXRPYmplY3RPcHRzID0ge1xuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcbn1cblxuLyogUmVwbGljYXRpb24gQ29uZmlnIHR5cGVzICovXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGVTdGF0dXMgPSB7XG4gIFN0YXR1czogJ0VuYWJsZWQnIHwgJ0Rpc2FibGVkJ1xufVxuXG5leHBvcnQgdHlwZSBUYWcgPSB7XG4gIEtleTogc3RyaW5nXG4gIFZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlRGVzdGluYXRpb24gPSB7XG4gIEJ1Y2tldDogc3RyaW5nXG4gIFN0b3JhZ2VDbGFzczogc3RyaW5nXG59XG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGVBbmQgPSB7XG4gIFByZWZpeDogc3RyaW5nXG4gIFRhZ3M6IFRhZ1tdXG59XG5cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uUnVsZUZpbHRlciA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgQW5kOiBSZXBsaWNhdGlvblJ1bGVBbmRcbiAgVGFnOiBUYWdcbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYU1vZGlmaWNhdGlvbnMgPSB7XG4gIFN0YXR1czogUmVwbGljYXRpb25SdWxlU3RhdHVzXG59XG5cbmV4cG9ydCB0eXBlIFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhID0ge1xuICBSZXBsaWNhTW9kaWZpY2F0aW9uczogUmVwbGljYU1vZGlmaWNhdGlvbnNcbn1cblxuZXhwb3J0IHR5cGUgRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbiA9IHtcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlID0ge1xuICBJRDogc3RyaW5nXG4gIFN0YXR1czogUmVwbGljYXRpb25SdWxlU3RhdHVzXG4gIFByaW9yaXR5OiBudW1iZXJcbiAgRGVsZXRlTWFya2VyUmVwbGljYXRpb246IFJlcGxpY2F0aW9uUnVsZVN0YXR1cyAvLyBzaG91bGQgYmUgc2V0IHRvIFwiRGlzYWJsZWRcIiBieSBkZWZhdWx0XG4gIERlbGV0ZVJlcGxpY2F0aW9uOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbiAgRGVzdGluYXRpb246IFJlcGxpY2F0aW9uUnVsZURlc3RpbmF0aW9uXG4gIEZpbHRlcjogUmVwbGljYXRpb25SdWxlRmlsdGVyXG4gIFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhOiBTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVxuICBFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uOiBFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uXG59XG5cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uQ29uZmlnT3B0cyA9IHtcbiAgcm9sZTogc3RyaW5nXG4gIHJ1bGVzOiBSZXBsaWNhdGlvblJ1bGVbXVxufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvbkNvbmZpZyA9IHtcbiAgUmVwbGljYXRpb25Db25maWd1cmF0aW9uOiBSZXBsaWNhdGlvbkNvbmZpZ09wdHNcbn1cbi8qIFJlcGxpY2F0aW9uIENvbmZpZyB0eXBlcyAqL1xuXG5leHBvcnQgdHlwZSBSZXN1bHRDYWxsYmFjazxUPiA9IChlcnJvcjogRXJyb3IgfCBudWxsLCByZXN1bHQ6IFQpID0+IHZvaWRcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQTtBQUFBLElBaUJZQSxnQkFBZ0IsMEJBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQUEsT0FBaEJBLGdCQUFnQjtBQUFBO0FBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsR0FBQUEsZ0JBQUE7QUFBQSxJQVdoQkUsZUFBZSwwQkFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBQSxPQUFmQSxlQUFlO0FBQUE7QUFBQUQsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUE7QUFBQSxJQUtmQyx3QkFBd0IsMEJBQXhCQSx3QkFBd0I7RUFBeEJBLHdCQUF3QjtFQUF4QkEsd0JBQXdCO0VBQUEsT0FBeEJBLHdCQUF3QjtBQUFBO0FBQUFGLE9BQUEsQ0FBQUUsd0JBQUEsR0FBQUEsd0JBQUE7QUFBQSxJQUt4QkMsaUJBQWlCLDBCQUFqQkEsaUJBQWlCO0VBQWpCQSxpQkFBaUI7RUFBakJBLGlCQUFpQjtFQUFBLE9BQWpCQSxpQkFBaUI7QUFBQTtBQTBGN0I7QUF5REE7QUFBQUgsT0FBQSxDQUFBRyxpQkFBQSxHQUFBQSxpQkFBQSJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFTkNSWVBUSU9OX1RZUEVTIiwiZXhwb3J0cyIsIlJFVEVOVElPTl9NT0RFUyIsIlJFVEVOVElPTl9WQUxJRElUWV9VTklUUyIsIkxFR0FMX0hPTERfU1RBVFVTIl0sInNvdXJjZXMiOlsidHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGh0dHAgZnJvbSAnbm9kZTpodHRwJ1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSBhcyBSZWFkYWJsZVN0cmVhbSB9IGZyb20gJ25vZGU6c3RyZWFtJ1xuXG5leHBvcnQgdHlwZSBWZXJzaW9uSWRlbnRpZmljYXRvciA9IHtcbiAgdmVyc2lvbklkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJpbmFyeSA9IHN0cmluZyB8IEJ1ZmZlclxuXG4vLyBub2RlanMgSW5jb21pbmdIdHRwSGVhZGVycyBpcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT4sIGJ1dCBpdCdzIGFjdHVhbGx5IHRoaXM6XG5leHBvcnQgdHlwZSBSZXNwb25zZUhlYWRlciA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TWV0YURhdGEgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIZWFkZXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IHVuZGVmaW5lZD5cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbiA9XG4gIHwge1xuICAgICAgdHlwZTogRU5DUllQVElPTl9UWVBFUy5TU0VDXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEVOQ1JZUFRJT05fVFlQRVMuS01TXG4gICAgICBTU0VBbGdvcml0aG0/OiBzdHJpbmdcbiAgICAgIEtNU01hc3RlcktleUlEPzogc3RyaW5nXG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbmFibGVkT3JEaXNhYmxlZFN0YXR1cyA9ICdFbmFibGVkJyB8ICdEaXNhYmxlZCdcbmV4cG9ydCBlbnVtIEVOQ1JZUFRJT05fVFlQRVMge1xuICAvKipcbiAgICogU1NFQyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBjdXN0b21lciBwcm92aWRlZCBrZXlzXG4gICAqL1xuICBTU0VDID0gJ1NTRS1DJyxcbiAgLyoqXG4gICAqIEtNUyByZXByZXNlbnRzIHNlcnZlci1zaWRlLWVuY3J5cHRpb24gd2l0aCBtYW5hZ2VkIGtleXNcbiAgICovXG4gIEtNUyA9ICdLTVMnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fTU9ERVMge1xuICBHT1ZFUk5BTkNFID0gJ0dPVkVSTkFOQ0UnLFxuICBDT01QTElBTkNFID0gJ0NPTVBMSUFOQ0UnLFxufVxuXG5leHBvcnQgZW51bSBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMge1xuICBEQVlTID0gJ0RheXMnLFxuICBZRUFSUyA9ICdZZWFycycsXG59XG5cbmV4cG9ydCBlbnVtIExFR0FMX0hPTERfU1RBVFVTIHtcbiAgRU5BQkxFRCA9ICdPTicsXG4gIERJU0FCTEVEID0gJ09GRicsXG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zcG9ydCA9IFBpY2s8dHlwZW9mIGh0dHAsICdyZXF1ZXN0Jz5cblxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCB7XG4gIHByb3RvY29sOiBzdHJpbmdcbiAgcG9ydD86IG51bWJlciB8IHN0cmluZ1xuICBtZXRob2Q6IHN0cmluZ1xuICBwYXRoOiBzdHJpbmdcbiAgaGVhZGVyczogUmVxdWVzdEhlYWRlcnNcbn1cblxuZXhwb3J0IHR5cGUgSUNhbm9uaWNhbFJlcXVlc3QgPSBzdHJpbmdcblxuZXhwb3J0IGludGVyZmFjZSBJbmNvbXBsZXRlVXBsb2FkZWRCdWNrZXRJdGVtIHtcbiAga2V5OiBzdHJpbmdcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUl0ZW0ge1xuICBLZXk6IHN0cmluZ1xuICBWYWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbUJ1Y2tldE1ldGFkYXRhTGlzdCB7XG4gIEl0ZW1zOiBNZXRhZGF0YUl0ZW1bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1CdWNrZXRNZXRhZGF0YSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldEl0ZW1Gcm9tTGlzdCB7XG4gIG5hbWU6IHN0cmluZ1xuICBjcmVhdGlvbkRhdGU6IERhdGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtQ29weSB7XG4gIGV0YWc6IHN0cmluZ1xuICBsYXN0TW9kaWZpZWQ6IERhdGVcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0SXRlbSA9XG4gIHwge1xuICAgICAgbmFtZTogc3RyaW5nXG4gICAgICBzaXplOiBudW1iZXJcbiAgICAgIGV0YWc6IHN0cmluZ1xuICAgICAgcHJlZml4PzogbmV2ZXJcbiAgICAgIGxhc3RNb2RpZmllZDogRGF0ZVxuICAgIH1cbiAgfCB7XG4gICAgICBuYW1lPzogbmV2ZXJcbiAgICAgIGV0YWc/OiBuZXZlclxuICAgICAgbGFzdE1vZGlmaWVkPzogbmV2ZXJcbiAgICAgIHByZWZpeDogc3RyaW5nXG4gICAgICBzaXplOiAwXG4gICAgfVxuXG5leHBvcnQgdHlwZSBCdWNrZXRJdGVtV2l0aE1ldGFkYXRhID0gQnVja2V0SXRlbSAmIHtcbiAgbWV0YWRhdGE/OiBJdGVtQnVja2V0TWV0YWRhdGEgfCBJdGVtQnVja2V0TWV0YWRhdGFMaXN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3RyZWFtPFQ+IGV4dGVuZHMgUmVhZGFibGVTdHJlYW0ge1xuICBvbihldmVudDogJ2RhdGEnLCBsaXN0ZW5lcjogKGl0ZW06IFQpID0+IHZvaWQpOiB0aGlzXG5cbiAgb24oZXZlbnQ6ICdlbmQnIHwgJ3BhdXNlJyB8ICdyZWFkYWJsZScgfCAncmVzdW1lJyB8ICdjbG9zZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAnZXJyb3InLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB0aGlzXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgb24oZXZlbnQ6IHN0cmluZyB8IHN5bWJvbCwgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRJdGVtU3RhdCB7XG4gIHNpemU6IG51bWJlclxuICBldGFnOiBzdHJpbmdcbiAgbGFzdE1vZGlmaWVkOiBEYXRlXG4gIG1ldGFEYXRhOiBJdGVtQnVja2V0TWV0YWRhdGFcbiAgdmVyc2lvbklkPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBTdGF0T2JqZWN0T3B0cyA9IHtcbiAgdmVyc2lvbklkPzogc3RyaW5nXG59XG5cbi8qIFJlcGxpY2F0aW9uIENvbmZpZyB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlU3RhdHVzID0ge1xuICBTdGF0dXM6IEVuYWJsZWRPckRpc2FibGVkU3RhdHVzXG59XG5cbmV4cG9ydCB0eXBlIFRhZyA9IHtcbiAgS2V5OiBzdHJpbmdcbiAgVmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGVEZXN0aW5hdGlvbiA9IHtcbiAgQnVja2V0OiBzdHJpbmdcbiAgU3RvcmFnZUNsYXNzOiBzdHJpbmdcbn1cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uUnVsZUFuZCA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnczogVGFnW11cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25SdWxlRmlsdGVyID0ge1xuICBQcmVmaXg6IHN0cmluZ1xuICBBbmQ6IFJlcGxpY2F0aW9uUnVsZUFuZFxuICBUYWc6IFRhZ1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhTW9kaWZpY2F0aW9ucyA9IHtcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEgPSB7XG4gIFJlcGxpY2FNb2RpZmljYXRpb25zOiBSZXBsaWNhTW9kaWZpY2F0aW9uc1xufVxuXG5leHBvcnQgdHlwZSBFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uID0ge1xuICBTdGF0dXM6IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xufVxuXG5leHBvcnQgdHlwZSBSZXBsaWNhdGlvblJ1bGUgPSB7XG4gIElEOiBzdHJpbmdcbiAgU3RhdHVzOiBSZXBsaWNhdGlvblJ1bGVTdGF0dXNcbiAgUHJpb3JpdHk6IG51bWJlclxuICBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbjogUmVwbGljYXRpb25SdWxlU3RhdHVzIC8vIHNob3VsZCBiZSBzZXQgdG8gXCJEaXNhYmxlZFwiIGJ5IGRlZmF1bHRcbiAgRGVsZXRlUmVwbGljYXRpb246IFJlcGxpY2F0aW9uUnVsZVN0YXR1c1xuICBEZXN0aW5hdGlvbjogUmVwbGljYXRpb25SdWxlRGVzdGluYXRpb25cbiAgRmlsdGVyOiBSZXBsaWNhdGlvblJ1bGVGaWx0ZXJcbiAgU291cmNlU2VsZWN0aW9uQ3JpdGVyaWE6IFNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gIEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb246IEV4aXN0aW5nT2JqZWN0UmVwbGljYXRpb25cbn1cblxuZXhwb3J0IHR5cGUgUmVwbGljYXRpb25Db25maWdPcHRzID0ge1xuICByb2xlOiBzdHJpbmdcbiAgcnVsZXM6IFJlcGxpY2F0aW9uUnVsZVtdXG59XG5cbmV4cG9ydCB0eXBlIFJlcGxpY2F0aW9uQ29uZmlnID0ge1xuICBSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IFJlcGxpY2F0aW9uQ29uZmlnT3B0c1xufVxuLyogUmVwbGljYXRpb24gQ29uZmlnIHR5cGVzICovXG5cbmV4cG9ydCB0eXBlIFJlc3VsdENhbGxiYWNrPFQ+ID0gKGVycm9yOiBFcnJvciB8IG51bGwsIHJlc3VsdDogVCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBHZXRPYmplY3RMZWdhbEhvbGRPcHRpb25zID0ge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBrZWVwIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlLCB1c2UgYExFR0FMX0hPTERfU1RBVFVTYCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCB0eXBlIExlZ2FsSG9sZFN0YXR1cyA9IExFR0FMX0hPTERfU1RBVFVTXG5cbmV4cG9ydCB0eXBlIFB1dE9iamVjdExlZ2FsSG9sZE9wdGlvbnMgPSB7XG4gIHZlcnNpb25JZD86IHN0cmluZ1xuICBzdGF0dXM6IExFR0FMX0hPTERfU1RBVFVTXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkZWRPYmplY3RJbmZvIHtcbiAgZXRhZzogc3RyaW5nXG4gIHZlcnNpb25JZDogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldGVudGlvbk9wdGlvbnMge1xuICB2ZXJzaW9uSWQ6IHN0cmluZ1xuICBtb2RlPzogUkVURU5USU9OX01PREVTXG4gIHJldGFpblVudGlsRGF0ZT86IElzb0RhdGVcbiAgZ292ZXJuYW5jZUJ5cGFzcz86IGJvb2xlYW5cbn1cbmV4cG9ydCB0eXBlIFJldGVudGlvbiA9IFJldGVudGlvbk9wdGlvbnMgfCBFbXB0eU9iamVjdFxuZXhwb3J0IHR5cGUgSXNvRGF0ZSA9IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj5cblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0luZm8gPVxuICB8IHtcbiAgICAgIG9iamVjdExvY2tFbmFibGVkOiBFbmFibGVkT3JEaXNhYmxlZFN0YXR1c1xuICAgICAgbW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICB1bml0OiBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFNcbiAgICAgIHZhbGlkaXR5OiBudW1iZXJcbiAgICB9XG4gIHwgRW1wdHlPYmplY3RcblxuZXhwb3J0IHR5cGUgT2JqZWN0TG9ja0NvbmZpZ1BhcmFtID0ge1xuICBPYmplY3RMb2NrRW5hYmxlZD86ICdFbmFibGVkJyB8IHVuZGVmaW5lZFxuICBSdWxlPzpcbiAgICB8IHtcbiAgICAgICAgRGVmYXVsdFJldGVudGlvbjpcbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgTW9kZTogUkVURU5USU9OX01PREVTXG4gICAgICAgICAgICAgIERheXM6IG51bWJlclxuICAgICAgICAgICAgICBZZWFyczogbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfCBFbXB0eU9iamVjdFxuICAgICAgfVxuICAgIHwgRW1wdHlPYmplY3Rcbn1cblxuZXhwb3J0IHR5cGUgVmVyc2lvbmluZ0VuYWJsZWQgPSAnRW5hYmxlZCdcbmV4cG9ydCB0eXBlIFZlcnNpb25pbmdTdXNwZW5kZWQgPSAnU3VzcGVuZGVkJ1xuXG5leHBvcnQgdHlwZSBCdWNrZXRWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgU3RhdHVzOiBWZXJzaW9uaW5nRW5hYmxlZCB8IFZlcnNpb25pbmdTdXNwZW5kZWRcbiAgLy8gVE9ETyBhZGQgRXhjbHVkZWRQcmVmaXhlcywgRXhjbHVkZUZvbGRlcnMgd2hpY2ggYXJlICBwYXJ0IG9mIE1pbklPJ3MgZXh0ZW5zaW9uLCBhcyBhbiBlbmhhbmNlbWVudC5cbn1cblxuZXhwb3J0IHR5cGUgVGFnZ2luZ09wdHMgPSB7XG4gIHZlcnNpb25JZDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFB1dFRhZ2dpbmdQYXJhbXMgPSB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBvYmplY3ROYW1lPzogc3RyaW5nXG4gIHRhZ3M6IFRhZ3NcbiAgcHV0T3B0cz86IFRhZ2dpbmdPcHRzXG59XG5cbmV4cG9ydCB0eXBlIFJlbW92ZVRhZ2dpbmdQYXJhbXMgPSB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICBvYmplY3ROYW1lPzogc3RyaW5nXG4gIHJlbW92ZU9wdHM/OiBUYWdnaW5nT3B0c1xufVxuXG5leHBvcnQgdHlwZSBJbnB1dFNlcmlhbGl6YXRpb24gPSB7XG4gIENvbXByZXNzaW9uVHlwZT86ICdOT05FJyB8ICdHWklQJyB8ICdCWklQMidcbiAgQ1NWPzoge1xuICAgIEFsbG93UXVvdGVkUmVjb3JkRGVsaW1pdGVyPzogYm9vbGVhblxuICAgIENvbW1lbnRzPzogc3RyaW5nXG4gICAgRmllbGREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgICBGaWxlSGVhZGVySW5mbz86ICdOT05FJyB8ICdJR05PUkUnIHwgJ1VTRSdcbiAgICBRdW90ZUNoYXJhY3Rlcj86IHN0cmluZ1xuICAgIFF1b3RlRXNjYXBlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUmVjb3JkRGVsaW1pdGVyPzogc3RyaW5nXG4gIH1cbiAgSlNPTj86IHtcbiAgICBUeXBlOiAnRE9DVU1FTlQnIHwgJ0xJTkVTJ1xuICB9XG4gIFBhcnF1ZXQ/OiBFbXB0eU9iamVjdFxufVxuXG5leHBvcnQgdHlwZSBPdXRwdXRTZXJpYWxpemF0aW9uID0ge1xuICBDU1Y/OiB7XG4gICAgRmllbGREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgICBRdW90ZUNoYXJhY3Rlcj86IHN0cmluZ1xuICAgIFF1b3RlRXNjYXBlQ2hhcmFjdGVyPzogc3RyaW5nXG4gICAgUXVvdGVGaWVsZHM/OiBzdHJpbmdcbiAgICBSZWNvcmREZWxpbWl0ZXI/OiBzdHJpbmdcbiAgfVxuICBKU09OPzoge1xuICAgIFJlY29yZERlbGltaXRlcj86IHN0cmluZ1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb2dyZXNzID0geyBFbmFibGVkOiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNjYW5SYW5nZSA9IHsgU3RhcnQ6IG51bWJlcjsgRW5kOiBudW1iZXIgfVxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9ucyA9IHtcbiAgZXhwcmVzc2lvbjogc3RyaW5nXG4gIGV4cHJlc3Npb25UeXBlPzogc3RyaW5nXG4gIGlucHV0U2VyaWFsaXphdGlvbjogSW5wdXRTZXJpYWxpemF0aW9uXG4gIG91dHB1dFNlcmlhbGl6YXRpb246IE91dHB1dFNlcmlhbGl6YXRpb25cbiAgcmVxdWVzdFByb2dyZXNzPzogU2VsZWN0UHJvZ3Jlc3NcbiAgc2NhblJhbmdlPzogU2NhblJhbmdlXG59XG5leHBvcnQgdHlwZSBFeHBpcmF0aW9uID0ge1xuICBEYXRlOiBzdHJpbmdcbiAgRGF5czogbnVtYmVyXG4gIERlbGV0ZU1hcmtlcjogYm9vbGVhblxuICBEZWxldGVBbGw6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUnVsZUZpbHRlckFuZCA9IHtcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnczogVGFnW11cbn1cbmV4cG9ydCB0eXBlIFJ1bGVGaWx0ZXIgPSB7XG4gIEFuZD86IFJ1bGVGaWx0ZXJBbmRcbiAgUHJlZml4OiBzdHJpbmdcbiAgVGFnPzogVGFnW11cbn1cblxuZXhwb3J0IHR5cGUgTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uID0ge1xuICBOb25jdXJyZW50RGF5czogbnVtYmVyXG4gIE5ld2VyTm9uY3VycmVudFZlcnNpb25zPzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIE5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbiA9IHtcbiAgU3RvcmFnZUNsYXNzOiBzdHJpbmdcbiAgTm9uY3VycmVudERheXM/OiBudW1iZXJcbiAgTmV3ZXJOb25jdXJyZW50VmVyc2lvbnM/OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvbiA9IHtcbiAgRGF0ZT86IHN0cmluZ1xuICBTdG9yYWdlQ2xhc3M6IHN0cmluZ1xuICBEYXlzOiBudW1iZXJcbn1cbmV4cG9ydCB0eXBlIEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCA9IHtcbiAgRGF5c0FmdGVySW5pdGlhdGlvbjogbnVtYmVyXG59XG5leHBvcnQgdHlwZSBMaWZlY3ljbGVSdWxlID0ge1xuICBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQ/OiBBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbiAgSUQ6IHN0cmluZ1xuICBQcmVmaXg/OiBzdHJpbmdcbiAgU3RhdHVzPzogc3RyaW5nXG4gIEV4cGlyYXRpb24/OiBFeHBpcmF0aW9uXG4gIFJ1bGVGaWx0ZXI/OiBSdWxlRmlsdGVyXG4gIE5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IE5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxuICBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb24/OiBOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cbiAgVHJhbnNpdGlvbj86IFRyYW5zaXRpb25cbn1cblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBSdWxlOiBMaWZlY3ljbGVSdWxlW11cbn1cblxuZXhwb3J0IHR5cGUgTGlmZUN5Y2xlQ29uZmlnUGFyYW0gPSBMaWZlY3ljbGVDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkIHwgJydcblxuZXhwb3J0IHR5cGUgQXBwbHlTU0VCeURlZmF1bHQgPSB7XG4gIEttc01hc3RlcktleUlEPzogc3RyaW5nXG4gIFNTRUFsZ29yaXRobTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25SdWxlID0ge1xuICBBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0PzogQXBwbHlTU0VCeURlZmF1bHRcbn1cblxuZXhwb3J0IHR5cGUgRW5jcnlwdGlvbkNvbmZpZyA9IHtcbiAgUnVsZTogRW5jcnlwdGlvblJ1bGVbXVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBO0FBQUEsSUFrQllBLGdCQUFnQiwwQkFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQWhCQSxnQkFBZ0I7RUFBQSxPQUFoQkEsZ0JBQWdCO0FBQUE7QUFBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFBQSxnQkFBQTtBQUFBLElBV2hCRSxlQUFlLDBCQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFBLE9BQWZBLGVBQWU7QUFBQTtBQUFBRCxPQUFBLENBQUFDLGVBQUEsR0FBQUEsZUFBQTtBQUFBLElBS2ZDLHdCQUF3QiwwQkFBeEJBLHdCQUF3QjtFQUF4QkEsd0JBQXdCO0VBQXhCQSx3QkFBd0I7RUFBQSxPQUF4QkEsd0JBQXdCO0FBQUE7QUFBQUYsT0FBQSxDQUFBRSx3QkFBQSxHQUFBQSx3QkFBQTtBQUFBLElBS3hCQyxpQkFBaUIsMEJBQWpCQSxpQkFBaUI7RUFBakJBLGlCQUFpQjtFQUFqQkEsaUJBQWlCO0VBQUEsT0FBakJBLGlCQUFpQjtBQUFBO0FBMEY3QjtBQTJEQTtBQU9BO0FBQ0E7QUFDQTtBQUZBSCxPQUFBLENBQUFHLGlCQUFBLEdBQUFBLGlCQUFBIn0=
/// <reference types="node" />
/// <reference types="node" />
import type * as http from 'node:http';
import type { BucketItemFromList, BucketItemWithMetadata, ReplicationConfig } from "./type.js";
import { SelectResults } from "../helpers.js";
import type { BucketItemFromList, BucketItemWithMetadata, ObjectLockInfo, ReplicationConfig } from "./type.js";
export declare function parseBucketRegion(xml: string): string;

@@ -44,2 +46,43 @@ export declare function parseError(xml: string, headerInfo: Record<string, unknown>): Record<string, unknown>;

export declare function parseInitiateMultipart(xml: string): string;
export declare function parseReplicationConfig(xml: string): ReplicationConfig;
export declare function parseReplicationConfig(xml: string): ReplicationConfig;
export declare function parseObjectLegalHoldConfig(xml: string): any;
export declare function parseTagging(xml: string): any;
export declare function parseCompleteMultipart(xml: string): {
location: any;
bucket: any;
key: any;
etag: any;
errCode?: undefined;
errMessage?: undefined;
} | {
errCode: any;
errMessage: any;
location?: undefined;
bucket?: undefined;
key?: undefined;
etag?: undefined;
} | undefined;
type UploadID = string;
export type ListMultipartResult = {
uploads: {
key: string;
uploadId: UploadID;
initiator: unknown;
owner: unknown;
storageClass: unknown;
initiated: Date;
}[];
prefixes: {
prefix: string;
}[];
isTruncated: boolean;
nextKeyMarker: string;
nextUploadIdMarker: string;
};
export declare function parseListMultipart(xml: string): ListMultipartResult;
export declare function parseObjectLockConfig(xml: string): ObjectLockInfo;
export declare function parseBucketVersioningConfig(xml: string): any;
export declare function parseSelectObjectContentResponse(res: Buffer): SelectResults | undefined;
export declare function parseLifecycleConfig(xml: string): any;
export declare function parseBucketEncryptionConfig(xml: string): any;
export {};
// imported from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/93cfb0ec069731dcdfc31464788613f7cddb8192/types/minio/index.d.ts
/* eslint-disable @typescript-eslint/no-explicit-any */
import { EventEmitter } from 'node:events';
import type { Readable as ReadableStream } from 'node:stream';
import type { CopyDestinationOptions, CopySourceOptions, LEGAL_HOLD_STATUS, RETENTION_MODES, RETENTION_VALIDITY_UNITS } from "./helpers.js";

@@ -11,12 +9,13 @@ import type { ClientOptions, NoResultCallback, RemoveOptions } from "./internal/client.js";

import { PostPolicy } from "./internal/post-policy.js";
import type { Region } from "./internal/s3-endpoints.js";
import type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, ExistingObjectReplication, IncompleteUploadedBucketItem, ItemBucketMetadata, ItemBucketMetadataList, MetadataItem, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, ResultCallback, SourceSelectionCriteria, Tag } from "./internal/type.js";
import type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, EmptyObject, ExistingObjectReplication, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, InputSerialization, IsoDate, ItemBucketMetadata, ItemBucketMetadataList, LegalHoldStatus, LifecycleConfig, LifecycleRule, MetadataItem, ObjectLockInfo, OutputSerialization, PutObjectLegalHoldOptions, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, ResultCallback, Retention, RetentionOptions, ScanRange, SelectOptions, SelectProgress, SourceSelectionCriteria, Tag, VersionIdentificator } from "./internal/type.js";
import type { NotificationConfig, NotificationEvent, NotificationPoller } from "./notification.js";
export * from "./errors.js";
export * from "./helpers.js";
export type { Region } from "./internal/s3-endpoints.js";
export type * from "./notification.js";
export * from "./notification.js";
export { CopyConditions, PostPolicy };
export type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, ClientOptions, ExistingObjectReplication, IncompleteUploadedBucketItem, ItemBucketMetadata, ItemBucketMetadataList, MetadataItem, NoResultCallback, RemoveOptions, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, SourceSelectionCriteria, Tag };
export type { MakeBucketOpt } from "./internal/client.js";
export type { BucketItem, BucketItemCopy, BucketItemFromList, BucketItemStat, BucketItemWithMetadata, BucketStream, ClientOptions, EmptyObject, ExistingObjectReplication, GetObjectLegalHoldOptions, IncompleteUploadedBucketItem, InputSerialization, IsoDate, ItemBucketMetadata, ItemBucketMetadataList, LegalHoldStatus, LifecycleConfig, LifecycleRule, MetadataItem, NoResultCallback, ObjectLockInfo, OutputSerialization, PutObjectLegalHoldOptions, RemoveOptions, ReplicaModifications, ReplicationConfig, ReplicationConfigOpts, ReplicationRule, ReplicationRuleAnd, ReplicationRuleDestination, ReplicationRuleFilter, ReplicationRuleStatus, Retention, RetentionOptions, ScanRange, SelectOptions, SelectProgress, SourceSelectionCriteria, Tag };
// Exports only from typings
export type NotificationEvent = 's3:ObjectCreated:*' | 's3:ObjectCreated:Put' | 's3:ObjectCreated:Post' | 's3:ObjectCreated:Copy' | 's3:ObjectCreated:CompleteMultipartUpload' | 's3:ObjectRemoved:*' | 's3:ObjectRemoved:Delete' | 's3:ObjectRemoved:DeleteMarkerCreated' | 's3:ReducedRedundancyLostObject' | 's3:TestEvent' | 's3:ObjectRestore:Post' | 's3:ObjectRestore:Completed' | 's3:Replication:OperationFailedReplication' | 's3:Replication:OperationMissedThreshold' | 's3:Replication:OperationReplicatedAfterThreshold' | 's3:Replication:OperationNotTracked' | string;
/**

@@ -31,16 +30,4 @@ * @deprecated keep for backward compatible, use `RETENTION_MODES` instead

export type LockUnit = RETENTION_VALIDITY_UNITS;
/**
* @deprecated keep for backward compatible
*/
export type LegalHoldStatus = LEGAL_HOLD_STATUS;
export type VersioningConfig = Record<string | number | symbol, unknown>;
export type TagList = Record<string, string>;
export type EmptyObject = Record<string, never>;
export type VersionIdentificator = Pick<RetentionOptions, 'versionId'>;
export type Lifecycle = LifecycleConfig | null | '';
export type Lock = LockConfig | EmptyObject;
export type Encryption = EncryptionConfig | EmptyObject;
export type Retention = RetentionOptions | EmptyObject;
export type IsoDate = string;
export interface PostPolicyResult {

@@ -52,12 +39,2 @@ postURL: string;

}
export interface UploadedObjectInfo {
etag: string;
versionId: string | null;
}
export interface LifecycleConfig {
Rule: LifecycleRule[];
}
export interface LifecycleRule {
[key: string]: any;
}
export interface LockConfig {

@@ -68,14 +45,2 @@ mode: RETENTION_MODES;

}
export interface EncryptionConfig {
Rule: EncryptionRule[];
}
export interface EncryptionRule {
[key: string]: any;
}
export interface RetentionOptions {
versionId: string;
mode?: RETENTION_MODES;
retainUntilDate?: IsoDate;
governanceBypass?: boolean;
}
export interface LegalHoldOptions {

@@ -85,43 +50,2 @@ versionId: string;

}
export interface InputSerialization {
CompressionType?: 'NONE' | 'GZIP' | 'BZIP2';
CSV?: {
AllowQuotedRecordDelimiter?: boolean;
Comments?: string;
FieldDelimiter?: string;
FileHeaderInfo?: 'NONE' | 'IGNORE' | 'USE';
QuoteCharacter?: string;
QuoteEscapeCharacter?: string;
RecordDelimiter?: string;
};
JSON?: {
Type: 'DOCUMENT' | 'LINES';
};
Parquet?: EmptyObject;
}
export interface OutputSerialization {
CSV?: {
FieldDelimiter?: string;
QuoteCharacter?: string;
QuoteEscapeCharacter?: string;
QuoteFields?: string;
RecordDelimiter?: string;
};
JSON?: {
RecordDelimiter?: string;
};
}
export interface SelectOptions {
expression: string;
expressionType?: string;
inputSerialization: InputSerialization;
outputSerialization: OutputSerialization;
requestProgress?: {
Enabled: boolean;
};
scanRange?: {
Start: number;
End: number;
};
}
export interface SourceObjectStats {

@@ -135,68 +59,6 @@ size: number;

// No need to export this. But without it - linter error.
export class TargetConfig {
setId(id: unknown): void;
addEvent(newEvent: unknown): void;
addFilterSuffix(suffix: string): void;
addFilterPrefix(prefix: string): void;
}
export interface MakeBucketOpt {
ObjectLocking: boolean;
}
// Exports from library
export class Client extends TypedClient {
// Bucket operations
makeBucket(bucketName: string, region: Region, makeOpts: MakeBucketOpt, callback: NoResultCallback): void;
makeBucket(bucketName: string, region: Region, callback: NoResultCallback): void;
makeBucket(bucketName: string, callback: NoResultCallback): void;
makeBucket(bucketName: string, region?: Region, makeOpts?: MakeBucketOpt): Promise<void>;
bucketExists(bucketName: string, callback: ResultCallback<boolean>): void;
bucketExists(bucketName: string): Promise<boolean>;
listObjects(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<BucketItem>;
listObjectsV2(bucketName: string, prefix?: string, recursive?: boolean, startAfter?: string): BucketStream<BucketItem>;
listIncompleteUploads(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<IncompleteUploadedBucketItem>;
getBucketVersioning(bucketName: string, callback: ResultCallback<VersioningConfig>): void;
getBucketVersioning(bucketName: string): Promise<VersioningConfig>;
setBucketVersioning(bucketName: string, versioningConfig: any, callback: NoResultCallback): void;
setBucketVersioning(bucketName: string, versioningConfig: any): Promise<void>;
getBucketTagging(bucketName: string, callback: ResultCallback<Tag[]>): void;
getBucketTagging(bucketName: string): Promise<Tag[]>;
setBucketTagging(bucketName: string, tags: TagList, callback: NoResultCallback): void;
setBucketTagging(bucketName: string, tags: TagList): Promise<void>;
removeBucketTagging(bucketName: string, callback: NoResultCallback): void;
removeBucketTagging(bucketName: string): Promise<void>;
setBucketLifecycle(bucketName: string, lifecycleConfig: Lifecycle, callback: NoResultCallback): void;
setBucketLifecycle(bucketName: string, lifecycleConfig: Lifecycle): Promise<void>;
getBucketLifecycle(bucketName: string, callback: ResultCallback<Lifecycle>): void;
getBucketLifecycle(bucketName: string): Promise<Lifecycle>;
removeBucketLifecycle(bucketName: string, callback: NoResultCallback): void;
removeBucketLifecycle(bucketName: string): Promise<void>;
setObjectLockConfig(bucketName: string, callback: NoResultCallback): void;
setObjectLockConfig(bucketName: string, lockConfig: Lock, callback: NoResultCallback): void;
setObjectLockConfig(bucketName: string, lockConfig?: Lock): Promise<void>;
getObjectLockConfig(bucketName: string, callback: ResultCallback<Lock>): void;
getObjectLockConfig(bucketName: string): Promise<Lock>;
getBucketEncryption(bucketName: string, callback: ResultCallback<Encryption>): void;
getBucketEncryption(bucketName: string): Promise<Encryption>;
setBucketEncryption(bucketName: string, encryptionConfig: Encryption, callback: NoResultCallback): void;
setBucketEncryption(bucketName: string, encryptionConfig: Encryption): Promise<void>;
removeBucketEncryption(bucketName: string, callback: NoResultCallback): void;
removeBucketEncryption(bucketName: string): Promise<void>;
// Object operations
getObject(bucketName: string, objectName: string, callback: ResultCallback<ReadableStream>): void;
getObject(bucketName: string, objectName: string): Promise<ReadableStream>;
getPartialObject(bucketName: string, objectName: string, offset: number, callback: ResultCallback<ReadableStream>): void;
getPartialObject(bucketName: string, objectName: string, offset: number, length: number, callback: ResultCallback<ReadableStream>): void;
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number): Promise<ReadableStream>;
fGetObject(bucketName: string, objectName: string, filePath: string, callback: NoResultCallback): void;
fGetObject(bucketName: string, objectName: string, filePath: string): Promise<void>;
putObject(bucketName: string, objectName: string, stream: ReadableStream | Buffer | string, callback: ResultCallback<UploadedObjectInfo>): void;
putObject(bucketName: string, objectName: string, stream: ReadableStream | Buffer | string, size: number, callback: ResultCallback<UploadedObjectInfo>): void;
putObject(bucketName: string, objectName: string, stream: ReadableStream | Buffer | string, size: number, metaData: ItemBucketMetadata, callback: ResultCallback<UploadedObjectInfo>): void;
putObject(bucketName: string, objectName: string, stream: ReadableStream | Buffer | string, size?: number, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
putObject(bucketName: string, objectName: string, stream: ReadableStream | Buffer | string, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
fPutObject(bucketName: string, objectName: string, filePath: string, metaData: ItemBucketMetadata, callback: ResultCallback<UploadedObjectInfo>): void;
fPutObject(bucketName: string, objectName: string, filePath: string, metaData?: ItemBucketMetadata): Promise<UploadedObjectInfo>;
copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions, callback: ResultCallback<BucketItemCopy>): void;

@@ -208,26 +70,6 @@ copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions): Promise<BucketItemCopy>;

removeIncompleteUpload(bucketName: string, objectName: string): Promise<void>;
putObjectRetention(bucketName: string, objectName: string, callback: NoResultCallback): void;
putObjectRetention(bucketName: string, objectName: string, retentionOptions: Retention, callback: NoResultCallback): void;
putObjectRetention(bucketName: string, objectName: string, retentionOptions?: Retention): Promise<void>;
getObjectRetention(bucketName: string, objectName: string, options: VersionIdentificator, callback: ResultCallback<Retention>): void;
getObjectRetention(bucketName: string, objectName: string, options: VersionIdentificator): Promise<Retention>;
setObjectTagging(bucketName: string, objectName: string, tags: TagList, callback: NoResultCallback): void;
setObjectTagging(bucketName: string, objectName: string, tags: TagList, putOptions: VersionIdentificator, callback: NoResultCallback): void;
setObjectTagging(bucketName: string, objectName: string, tags: TagList, putOptions?: VersionIdentificator): Promise<void>;
removeObjectTagging(bucketName: string, objectName: string, callback: NoResultCallback): void;
removeObjectTagging(bucketName: string, objectName: string, removeOptions: VersionIdentificator, callback: NoResultCallback): void;
removeObjectTagging(bucketName: string, objectName: string, removeOptions?: VersionIdentificator): Promise<void>;
getObjectTagging(bucketName: string, objectName: string, callback: ResultCallback<Tag[]>): void;
getObjectTagging(bucketName: string, objectName: string, getOptions: VersionIdentificator, callback: ResultCallback<Tag[]>): void;
getObjectTagging(bucketName: string, objectName: string, getOptions?: VersionIdentificator): Promise<Tag[]>;
getObjectLegalHold(bucketName: string, objectName: string, callback: ResultCallback<LegalHoldOptions>): void;
getObjectLegalHold(bucketName: string, objectName: string, getOptions: VersionIdentificator, callback: ResultCallback<LegalHoldOptions>): void;
getObjectLegalHold(bucketName: string, objectName: string, getOptions?: VersionIdentificator): Promise<LegalHoldOptions>;
setObjectLegalHold(bucketName: string, objectName: string, callback: NoResultCallback): void;
setObjectLegalHold(bucketName: string, objectName: string, setOptions: LegalHoldOptions, callback: NoResultCallback): void;
setObjectLegalHold(bucketName: string, objectName: string, setOptions?: LegalHoldOptions): Promise<void>;
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[], callback: ResultCallback<SourceObjectStats>): void;
composeObject(destObjConfig: CopyDestinationOptions, sourceObjList: CopySourceOptions[]): Promise<SourceObjectStats>;
selectObjectContent(bucketName: string, objectName: string, selectOpts: SelectOptions, callback: NoResultCallback): void;
selectObjectContent(bucketName: string, objectName: string, selectOpts: SelectOptions): Promise<void>;

@@ -270,6 +112,2 @@ // Presigned operations

removeAllBucketNotification(bucketName: string): Promise<void>;
getBucketPolicy(bucketName: string, callback: ResultCallback<string>): void;
getBucketPolicy(bucketName: string): Promise<string>;
setBucketPolicy(bucketName: string, bucketPolicy: string, callback: NoResultCallback): void;
setBucketPolicy(bucketName: string, bucketPolicy: string): Promise<void>;
listenBucketNotification(bucketName: string, prefix: string, suffix: string, events: NotificationEvent[]): NotificationPoller;

@@ -279,31 +117,2 @@

newPostPolicy(): PostPolicy;
}
export declare class NotificationPoller extends EventEmitter {
stop(): void;
start(): void;
// must to be public?
checkForChanges(): void;
}
export declare class NotificationConfig {
add(target: TopicConfig | QueueConfig | CloudFunctionConfig): void;
}
export declare class TopicConfig extends TargetConfig {
constructor(arn: string);
}
export declare class QueueConfig extends TargetConfig {
constructor(arn: string);
}
export declare class CloudFunctionConfig extends TargetConfig {
constructor(arn: string);
}
export declare function buildARN(partition: string, service: string, region: string, accountId: string, resource: string): string;
export declare const ObjectCreatedAll: NotificationEvent; // s3:ObjectCreated:*'
export declare const ObjectCreatedPut: NotificationEvent; // s3:ObjectCreated:Put
export declare const ObjectCreatedPost: NotificationEvent; // s3:ObjectCreated:Post
export declare const ObjectCreatedCopy: NotificationEvent; // s3:ObjectCreated:Copy
export declare const ObjectCreatedCompleteMultipartUpload: NotificationEvent; // s3:ObjectCreated:CompleteMultipartUpload
export declare const ObjectRemovedAll: NotificationEvent; // s3:ObjectRemoved:*
export declare const ObjectRemovedDelete: NotificationEvent; // s3:ObjectRemoved:Delete
export declare const ObjectRemovedDeleteMarkerCreated: NotificationEvent; // s3:ObjectRemoved:DeleteMarkerCreated
export declare const ObjectReducedRedundancyLostObject: NotificationEvent; // s3:ReducedRedundancyLostObject
}

@@ -6,8 +6,6 @@ "use strict";

});
var _events = require("events");
var _eventemitter = require("eventemitter3");
var _Parser = require("stream-json/jsonl/Parser.js");
var _helpers = require("./helpers.js");
var _helper = require("./internal/helper.js");
var transformers = _interopRequireWildcard(require("./transformers.js"), true);
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/*

@@ -29,28 +27,5 @@ * MinIO Javascript Library for Amazon S3 Compatible Cloud Storage, (C) 2016 MinIO, Inc.

// Notification config - array of target configs.
// Target configs can be
// 1. Topic (simple notification service)
// 2. Queue (simple queue service)
// 3. CloudFront (lambda function)
class NotificationConfig {
add(target) {
let instance = '';
if (target instanceof TopicConfig) {
instance = 'TopicConfiguration';
}
if (target instanceof QueueConfig) {
instance = 'QueueConfiguration';
}
if (target instanceof CloudFunctionConfig) {
instance = 'CloudFunctionConfiguration';
}
if (!this[instance]) {
this[instance] = [];
}
this[instance].push(target);
}
}
// TODO: type this
// Base class for three supported configs.
exports.NotificationConfig = NotificationConfig;
class TargetConfig {

@@ -95,2 +70,3 @@ setId(id) {

// 1. Topic (simple notification service)
exports.TargetConfig = TargetConfig;
class TopicConfig extends TargetConfig {

@@ -120,3 +96,27 @@ constructor(arn) {

}
// Notification config - array of target configs.
// Target configs can be
// 1. Topic (simple notification service)
// 2. Queue (simple queue service)
// 3. CloudFront (lambda function)
exports.CloudFunctionConfig = CloudFunctionConfig;
class NotificationConfig {
add(target) {
let instance;
if (target instanceof TopicConfig) {
instance = this.TopicConfiguration ?? (this.TopicConfiguration = []);
}
if (target instanceof QueueConfig) {
instance = this.QueueConfiguration ?? (this.QueueConfiguration = []);
}
if (target instanceof CloudFunctionConfig) {
instance = this.CloudFunctionConfiguration ?? (this.CloudFunctionConfiguration = []);
}
if (instance) {
instance.push(target);
}
}
}
exports.NotificationConfig = NotificationConfig;
const buildARN = (partition, service, region, accountId, resource) => {

@@ -144,7 +144,10 @@ return 'arn:' + partition + ':' + service + ':' + region + ':' + accountId + ':' + resource;

// put string at least so auto-complete could work
// TODO: type this
exports.ObjectReducedRedundancyLostObject = ObjectReducedRedundancyLostObject;
// Poll for notifications, used in #listenBucketNotification.
// Listening constitutes repeatedly requesting s3 whether or not any
// changes have occurred.
exports.ObjectReducedRedundancyLostObject = ObjectReducedRedundancyLostObject;
class NotificationPoller extends _events.EventEmitter {
class NotificationPoller extends _eventemitter.EventEmitter {
constructor(client, bucketName, prefix, suffix, events) {

@@ -177,10 +180,10 @@ super();

}
let method = 'GET';
var queries = [];
const method = 'GET';
const queries = [];
if (this.prefix) {
var prefix = (0, _helper.uriEscape)(this.prefix);
const prefix = (0, _helper.uriEscape)(this.prefix);
queries.push(`prefix=${prefix}`);
}
if (this.suffix) {
var suffix = (0, _helper.uriEscape)(this.suffix);
const suffix = (0, _helper.uriEscape)(this.suffix);
queries.push(`suffix=${suffix}`);

@@ -192,3 +195,3 @@ }

queries.sort();
var query = '';
let query = '';
if (queries.length > 0) {

@@ -198,15 +201,12 @@ query = `${queries.join('&')}`;

const region = this.client.region || _helpers.DEFAULT_REGION;
this.client.makeRequest({
this.client.makeRequestAsync({
method,
bucketName: this.bucketName,
query
}, '', [200], region, true, (e, response) => {
if (e) {
return this.emit('error', e);
}
let transformer = transformers.getNotificationTransformer();
(0, _helper.pipesetup)(response, transformer).on('data', result => {
}, '', [200], region).then(response => {
const asm = _Parser.make();
(0, _helper.pipesetup)(response, asm).on('data', data => {
// Data is flushed periodically (every 5 seconds), so we should
// handle it after flushing from the JSON parser.
let records = result.Records;
let records = data.value.Records;
// If null (= no records), change to an empty array.

@@ -224,3 +224,3 @@ if (!records) {

if (this.ending) {
response.destroy();
response === null || response === void 0 ? void 0 : response.destroy();
}

@@ -233,2 +233,4 @@ }).on('error', e => this.emit('error', e)).on('end', () => {

});
}, e => {
return this.emit('error', e);
});

@@ -238,2 +240,2 @@ }

exports.NotificationPoller = NotificationPoller;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9oZWxwZXJzIiwiX2hlbHBlciIsInRyYW5zZm9ybWVycyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIk5vdGlmaWNhdGlvbkNvbmZpZyIsImFkZCIsInRhcmdldCIsImluc3RhbmNlIiwiVG9waWNDb25maWciLCJRdWV1ZUNvbmZpZyIsIkNsb3VkRnVuY3Rpb25Db25maWciLCJwdXNoIiwiZXhwb3J0cyIsIlRhcmdldENvbmZpZyIsInNldElkIiwiaWQiLCJJZCIsImFkZEV2ZW50IiwibmV3ZXZlbnQiLCJFdmVudCIsImFkZEZpbHRlclN1ZmZpeCIsInN1ZmZpeCIsIkZpbHRlciIsIlMzS2V5IiwiRmlsdGVyUnVsZSIsIk5hbWUiLCJWYWx1ZSIsImFkZEZpbHRlclByZWZpeCIsInByZWZpeCIsImNvbnN0cnVjdG9yIiwiYXJuIiwiVG9waWMiLCJRdWV1ZSIsIkNsb3VkRnVuY3Rpb24iLCJidWlsZEFSTiIsInBhcnRpdGlvbiIsInNlcnZpY2UiLCJyZWdpb24iLCJhY2NvdW50SWQiLCJyZXNvdXJjZSIsIk9iamVjdENyZWF0ZWRBbGwiLCJPYmplY3RDcmVhdGVkUHV0IiwiT2JqZWN0Q3JlYXRlZFBvc3QiLCJPYmplY3RDcmVhdGVkQ29weSIsIk9iamVjdENyZWF0ZWRDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsIk9iamVjdFJlbW92ZWRBbGwiLCJPYmplY3RSZW1vdmVkRGVsZXRlIiwiT2JqZWN0UmVtb3ZlZERlbGV0ZU1hcmtlckNyZWF0ZWQiLCJPYmplY3RSZWR1Y2VkUmVkdW5kYW5jeUxvc3RPYmplY3QiLCJOb3RpZmljYXRpb25Qb2xsZXIiLCJFdmVudEVtaXR0ZXIiLCJjbGllbnQiLCJidWNrZXROYW1lIiwiZXZlbnRzIiwiZW5kaW5nIiwic3RhcnQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJjaGVja0ZvckNoYW5nZXMiLCJzdG9wIiwibWV0aG9kIiwicXVlcmllcyIsInVyaUVzY2FwZSIsImZvckVhY2giLCJzM2V2ZW50Iiwic29ydCIsInF1ZXJ5IiwibGVuZ3RoIiwiam9pbiIsIkRFRkFVTFRfUkVHSU9OIiwibWFrZVJlcXVlc3QiLCJlIiwicmVzcG9uc2UiLCJlbWl0IiwidHJhbnNmb3JtZXIiLCJnZXROb3RpZmljYXRpb25UcmFuc2Zvcm1lciIsInBpcGVzZXR1cCIsIm9uIiwicmVzdWx0IiwicmVjb3JkcyIsIlJlY29yZHMiLCJyZWNvcmQiLCJkZXN0cm95Il0sInNvdXJjZXMiOlsibm90aWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBNaW5JTyBKYXZhc2NyaXB0IExpYnJhcnkgZm9yIEFtYXpvbiBTMyBDb21wYXRpYmxlIENsb3VkIFN0b3JhZ2UsIChDKSAyMDE2IE1pbklPLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ25vZGU6ZXZlbnRzJ1xuXG5pbXBvcnQgeyBERUZBVUxUX1JFR0lPTiB9IGZyb20gJy4vaGVscGVycy50cydcbmltcG9ydCB7IHBpcGVzZXR1cCwgdXJpRXNjYXBlIH0gZnJvbSAnLi9pbnRlcm5hbC9oZWxwZXIudHMnXG5pbXBvcnQgKiBhcyB0cmFuc2Zvcm1lcnMgZnJvbSAnLi90cmFuc2Zvcm1lcnMuanMnXG5cbi8vIE5vdGlmaWNhdGlvbiBjb25maWcgLSBhcnJheSBvZiB0YXJnZXQgY29uZmlncy5cbi8vIFRhcmdldCBjb25maWdzIGNhbiBiZVxuLy8gMS4gVG9waWMgKHNpbXBsZSBub3RpZmljYXRpb24gc2VydmljZSlcbi8vIDIuIFF1ZXVlIChzaW1wbGUgcXVldWUgc2VydmljZSlcbi8vIDMuIENsb3VkRnJvbnQgKGxhbWJkYSBmdW5jdGlvbilcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25Db25maWcge1xuICBhZGQodGFyZ2V0KSB7XG4gICAgbGV0IGluc3RhbmNlID0gJydcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVG9waWNDb25maWcpIHtcbiAgICAgIGluc3RhbmNlID0gJ1RvcGljQ29uZmlndXJhdGlvbidcbiAgICB9XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFF1ZXVlQ29uZmlnKSB7XG4gICAgICBpbnN0YW5jZSA9ICdRdWV1ZUNvbmZpZ3VyYXRpb24nXG4gICAgfVxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBDbG91ZEZ1bmN0aW9uQ29uZmlnKSB7XG4gICAgICBpbnN0YW5jZSA9ICdDbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbidcbiAgICB9XG4gICAgaWYgKCF0aGlzW2luc3RhbmNlXSkge1xuICAgICAgdGhpc1tpbnN0YW5jZV0gPSBbXVxuICAgIH1cbiAgICB0aGlzW2luc3RhbmNlXS5wdXNoKHRhcmdldClcbiAgfVxufVxuXG4vLyBCYXNlIGNsYXNzIGZvciB0aHJlZSBzdXBwb3J0ZWQgY29uZmlncy5cbmNsYXNzIFRhcmdldENvbmZpZyB7XG4gIHNldElkKGlkKSB7XG4gICAgdGhpcy5JZCA9IGlkXG4gIH1cbiAgYWRkRXZlbnQobmV3ZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuRXZlbnQpIHtcbiAgICAgIHRoaXMuRXZlbnQgPSBbXVxuICAgIH1cbiAgICB0aGlzLkV2ZW50LnB1c2gobmV3ZXZlbnQpXG4gIH1cbiAgYWRkRmlsdGVyU3VmZml4KHN1ZmZpeCkge1xuICAgIGlmICghdGhpcy5GaWx0ZXIpIHtcbiAgICAgIHRoaXMuRmlsdGVyID0geyBTM0tleTogeyBGaWx0ZXJSdWxlOiBbXSB9IH1cbiAgICB9XG4gICAgdGhpcy5GaWx0ZXIuUzNLZXkuRmlsdGVyUnVsZS5wdXNoKHsgTmFtZTogJ3N1ZmZpeCcsIFZhbHVlOiBzdWZmaXggfSlcbiAgfVxuICBhZGRGaWx0ZXJQcmVmaXgocHJlZml4KSB7XG4gICAgaWYgKCF0aGlzLkZpbHRlcikge1xuICAgICAgdGhpcy5GaWx0ZXIgPSB7IFMzS2V5OiB7IEZpbHRlclJ1bGU6IFtdIH0gfVxuICAgIH1cbiAgICB0aGlzLkZpbHRlci5TM0tleS5GaWx0ZXJSdWxlLnB1c2goeyBOYW1lOiAncHJlZml4JywgVmFsdWU6IHByZWZpeCB9KVxuICB9XG59XG5cbi8vIDEuIFRvcGljIChzaW1wbGUgbm90aWZpY2F0aW9uIHNlcnZpY2UpXG5leHBvcnQgY2xhc3MgVG9waWNDb25maWcgZXh0ZW5kcyBUYXJnZXRDb25maWcge1xuICBjb25zdHJ1Y3Rvcihhcm4pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5Ub3BpYyA9IGFyblxuICB9XG59XG5cbi8vIDIuIFF1ZXVlIChzaW1wbGUgcXVldWUgc2VydmljZSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbmZpZyBleHRlbmRzIFRhcmdldENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGFybikge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLlF1ZXVlID0gYXJuXG4gIH1cbn1cblxuLy8gMy4gQ2xvdWRGcm9udCAobGFtYmRhIGZ1bmN0aW9uKVxuZXhwb3J0IGNsYXNzIENsb3VkRnVuY3Rpb25Db25maWcgZXh0ZW5kcyBUYXJnZXRDb25maWcge1xuICBjb25zdHJ1Y3Rvcihhcm4pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5DbG91ZEZ1bmN0aW9uID0gYXJuXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVJOID0gKHBhcnRpdGlvbiwgc2VydmljZSwgcmVnaW9uLCBhY2NvdW50SWQsIHJlc291cmNlKSA9PiB7XG4gIHJldHVybiAnYXJuOicgKyBwYXJ0aXRpb24gKyAnOicgKyBzZXJ2aWNlICsgJzonICsgcmVnaW9uICsgJzonICsgYWNjb3VudElkICsgJzonICsgcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGNvbnN0IE9iamVjdENyZWF0ZWRBbGwgPSAnczM6T2JqZWN0Q3JlYXRlZDoqJ1xuZXhwb3J0IGNvbnN0IE9iamVjdENyZWF0ZWRQdXQgPSAnczM6T2JqZWN0Q3JlYXRlZDpQdXQnXG5leHBvcnQgY29uc3QgT2JqZWN0Q3JlYXRlZFBvc3QgPSAnczM6T2JqZWN0Q3JlYXRlZDpQb3N0J1xuZXhwb3J0IGNvbnN0IE9iamVjdENyZWF0ZWRDb3B5ID0gJ3MzOk9iamVjdENyZWF0ZWQ6Q29weSdcbmV4cG9ydCBjb25zdCBPYmplY3RDcmVhdGVkQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQgPSAnczM6T2JqZWN0Q3JlYXRlZDpDb21wbGV0ZU11bHRpcGFydFVwbG9hZCdcbmV4cG9ydCBjb25zdCBPYmplY3RSZW1vdmVkQWxsID0gJ3MzOk9iamVjdFJlbW92ZWQ6KidcbmV4cG9ydCBjb25zdCBPYmplY3RSZW1vdmVkRGVsZXRlID0gJ3MzOk9iamVjdFJlbW92ZWQ6RGVsZXRlJ1xuZXhwb3J0IGNvbnN0IE9iamVjdFJlbW92ZWREZWxldGVNYXJrZXJDcmVhdGVkID0gJ3MzOk9iamVjdFJlbW92ZWQ6RGVsZXRlTWFya2VyQ3JlYXRlZCdcbmV4cG9ydCBjb25zdCBPYmplY3RSZWR1Y2VkUmVkdW5kYW5jeUxvc3RPYmplY3QgPSAnczM6UmVkdWNlZFJlZHVuZGFuY3lMb3N0T2JqZWN0J1xuXG4vLyBQb2xsIGZvciBub3RpZmljYXRpb25zLCB1c2VkIGluICNsaXN0ZW5CdWNrZXROb3RpZmljYXRpb24uXG4vLyBMaXN0ZW5pbmcgY29uc3RpdHV0ZXMgcmVwZWF0ZWRseSByZXF1ZXN0aW5nIHMzIHdoZXRoZXIgb3Igbm90IGFueVxuLy8gY2hhbmdlcyBoYXZlIG9jY3VycmVkLlxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblBvbGxlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudCwgYnVja2V0TmFtZSwgcHJlZml4LCBzdWZmaXgsIGV2ZW50cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5idWNrZXROYW1lID0gYnVja2V0TmFtZVxuICAgIHRoaXMucHJlZml4ID0gcHJlZml4XG4gICAgdGhpcy5zdWZmaXggPSBzdWZmaXhcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50c1xuXG4gICAgdGhpcy5lbmRpbmcgPSBmYWxzZVxuICB9XG5cbiAgLy8gU3RhcnRzIHRoZSBwb2xsaW5nLlxuICBzdGFydCgpIHtcbiAgICB0aGlzLmVuZGluZyA9IGZhbHNlXG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzKClcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RvcHMgdGhlIHBvbGxpbmcuXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5lbmRpbmcgPSB0cnVlXG4gIH1cblxuICBjaGVja0ZvckNoYW5nZXMoKSB7XG4gICAgLy8gRG9uJ3QgY29udGludWUgaWYgd2UncmUgbG9vcGluZyBhZ2FpbiBidXQgYXJlIGNhbmNlbGxlZC5cbiAgICBpZiAodGhpcy5lbmRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBtZXRob2QgPSAnR0VUJ1xuICAgIHZhciBxdWVyaWVzID0gW11cbiAgICBpZiAodGhpcy5wcmVmaXgpIHtcbiAgICAgIHZhciBwcmVmaXggPSB1cmlFc2NhcGUodGhpcy5wcmVmaXgpXG4gICAgICBxdWVyaWVzLnB1c2goYHByZWZpeD0ke3ByZWZpeH1gKVxuICAgIH1cbiAgICBpZiAodGhpcy5zdWZmaXgpIHtcbiAgICAgIHZhciBzdWZmaXggPSB1cmlFc2NhcGUodGhpcy5zdWZmaXgpXG4gICAgICBxdWVyaWVzLnB1c2goYHN1ZmZpeD0ke3N1ZmZpeH1gKVxuICAgIH1cbiAgICBpZiAodGhpcy5ldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnRzLmZvckVhY2goKHMzZXZlbnQpID0+IHF1ZXJpZXMucHVzaCgnZXZlbnRzPScgKyB1cmlFc2NhcGUoczNldmVudCkpKVxuICAgIH1cbiAgICBxdWVyaWVzLnNvcnQoKVxuXG4gICAgdmFyIHF1ZXJ5ID0gJydcbiAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVyeSA9IGAke3F1ZXJpZXMuam9pbignJicpfWBcbiAgICB9XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5jbGllbnQucmVnaW9uIHx8IERFRkFVTFRfUkVHSU9OXG4gICAgdGhpcy5jbGllbnQubWFrZVJlcXVlc3QoeyBtZXRob2QsIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0TmFtZSwgcXVlcnkgfSwgJycsIFsyMDBdLCByZWdpb24sIHRydWUsIChlLCByZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlKVxuICAgICAgfVxuXG4gICAgICBsZXQgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lcnMuZ2V0Tm90aWZpY2F0aW9uVHJhbnNmb3JtZXIoKVxuICAgICAgcGlwZXNldHVwKHJlc3BvbnNlLCB0cmFuc2Zvcm1lcilcbiAgICAgICAgLm9uKCdkYXRhJywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIC8vIERhdGEgaXMgZmx1c2hlZCBwZXJpb2RpY2FsbHkgKGV2ZXJ5IDUgc2Vjb25kcyksIHNvIHdlIHNob3VsZFxuICAgICAgICAgIC8vIGhhbmRsZSBpdCBhZnRlciBmbHVzaGluZyBmcm9tIHRoZSBKU09OIHBhcnNlci5cbiAgICAgICAgICBsZXQgcmVjb3JkcyA9IHJlc3VsdC5SZWNvcmRzXG4gICAgICAgICAgLy8gSWYgbnVsbCAoPSBubyByZWNvcmRzKSwgY2hhbmdlIHRvIGFuIGVtcHR5IGFycmF5LlxuICAgICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmVjb3JkcyA9IFtdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBub3RpZmljYXRpb25zIGFuZCBlbWl0IHRoZW0gaW5kaXZpZHVhbGx5LlxuICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ25vdGlmaWNhdGlvbicsIHJlY29yZClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gSWYgd2UncmUgZG9uZSwgc3RvcC5cbiAgICAgICAgICBpZiAodGhpcy5lbmRpbmcpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRlc3Ryb3koKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIChlKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZSkpXG4gICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgIC8vIERvIGl0IGFnYWluLCBpZiB3ZSBoYXZlbid0IGNhbmNlbGxlZCB5ZXQuXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcygpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUFpRCxTQUFBSyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBRix3QkFBQU0sR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLG9CQUFBQSxHQUFBLHdCQUFBQSxHQUFBLDRCQUFBRSxPQUFBLEVBQUFGLEdBQUEsVUFBQUcsS0FBQSxHQUFBUix3QkFBQSxDQUFBQyxXQUFBLE9BQUFPLEtBQUEsSUFBQUEsS0FBQSxDQUFBQyxHQUFBLENBQUFKLEdBQUEsWUFBQUcsS0FBQSxDQUFBRSxHQUFBLENBQUFMLEdBQUEsU0FBQU0sTUFBQSxXQUFBQyxxQkFBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxHQUFBLElBQUFYLEdBQUEsUUFBQVcsR0FBQSxrQkFBQUgsTUFBQSxDQUFBSSxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxD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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRlbWl0dGVyIiwicmVxdWlyZSIsIl9QYXJzZXIiLCJfaGVscGVycyIsIl9oZWxwZXIiLCJUYXJnZXRDb25maWciLCJzZXRJZCIsImlkIiwiSWQiLCJhZGRFdmVudCIsIm5ld2V2ZW50IiwiRXZlbnQiLCJwdXNoIiwiYWRkRmlsdGVyU3VmZml4Iiwic3VmZml4IiwiRmlsdGVyIiwiUzNLZXkiLCJGaWx0ZXJSdWxlIiwiTmFtZSIsIlZhbHVlIiwiYWRkRmlsdGVyUHJlZml4IiwicHJlZml4IiwiZXhwb3J0cyIsIlRvcGljQ29uZmlnIiwiY29uc3RydWN0b3IiLCJhcm4iLCJUb3BpYyIsIlF1ZXVlQ29uZmlnIiwiUXVldWUiLCJDbG91ZEZ1bmN0aW9uQ29uZmlnIiwiQ2xvdWRGdW5jdGlvbiIsIk5vdGlmaWNhdGlvbkNvbmZpZyIsImFkZCIsInRhcmdldCIsImluc3RhbmNlIiwiVG9waWNDb25maWd1cmF0aW9uIiwiUXVldWVDb25maWd1cmF0aW9uIiwiQ2xvdWRGdW5jdGlvbkNvbmZpZ3VyYXRpb24iLCJidWlsZEFSTiIsInBhcnRpdGlvbiIsInNlcnZpY2UiLCJyZWdpb24iLCJhY2NvdW50SWQiLCJyZXNvdXJjZSIsIk9iamVjdENyZWF0ZWRBbGwiLCJPYmplY3RDcmVhdGVkUHV0IiwiT2JqZWN0Q3JlYXRlZFBvc3QiLCJPYmplY3RDcmVhdGVkQ29weSIsIk9iamVjdENyZWF0ZWRDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsIk9iamVjdFJlbW92ZWRBbGwiLCJPYmplY3RSZW1vdmVkRGVsZXRlIiwiT2JqZWN0UmVtb3ZlZERlbGV0ZU1hcmtlckNyZWF0ZWQiLCJPYmplY3RSZWR1Y2VkUmVkdW5kYW5jeUxvc3RPYmplY3QiLCJOb3RpZmljYXRpb25Qb2xsZXIiLCJFdmVudEVtaXR0ZXIiLCJjbGllbnQiLCJidWNrZXROYW1lIiwiZXZlbnRzIiwiZW5kaW5nIiwic3RhcnQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJjaGVja0ZvckNoYW5nZXMiLCJzdG9wIiwibWV0aG9kIiwicXVlcmllcyIsInVyaUVzY2FwZSIsImZvckVhY2giLCJzM2V2ZW50Iiwic29ydCIsInF1ZXJ5IiwibGVuZ3RoIiwiam9pbiIsIkRFRkFVTFRfUkVHSU9OIiwibWFrZVJlcXVlc3RBc3luYyIsInRoZW4iLCJyZXNwb25zZSIsImFzbSIsImpzb25MaW5lUGFyc2VyIiwibWFrZSIsInBpcGVzZXR1cCIsIm9uIiwiZGF0YSIsInJlY29yZHMiLCJ2YWx1ZSIsIlJlY29yZHMiLCJyZWNvcmQiLCJlbWl0IiwiZGVzdHJveSIsImUiXSwic291cmNlcyI6WyJub3RpZmljYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTYgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMydcbmltcG9ydCBqc29uTGluZVBhcnNlciBmcm9tICdzdHJlYW0tanNvbi9qc29ubC9QYXJzZXIuanMnXG5cbmltcG9ydCB7IERFRkFVTFRfUkVHSU9OIH0gZnJvbSAnLi9oZWxwZXJzLnRzJ1xuaW1wb3J0IHR5cGUgeyBUeXBlZENsaWVudCB9IGZyb20gJy4vaW50ZXJuYWwvY2xpZW50LnRzJ1xuaW1wb3J0IHsgcGlwZXNldHVwLCB1cmlFc2NhcGUgfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcblxuLy8gVE9ETzogdHlwZSB0aGlzXG5cbnR5cGUgRXZlbnQgPSB1bmtub3duXG5cbi8vIEJhc2UgY2xhc3MgZm9yIHRocmVlIHN1cHBvcnRlZCBjb25maWdzLlxuZXhwb3J0IGNsYXNzIFRhcmdldENvbmZpZyB7XG4gIHByaXZhdGUgRmlsdGVyPzogeyBTM0tleTogeyBGaWx0ZXJSdWxlOiB7IE5hbWU6IHN0cmluZzsgVmFsdWU6IHN0cmluZyB9W10gfSB9XG4gIHByaXZhdGUgRXZlbnQ/OiBFdmVudFtdXG4gIHByaXZhdGUgSWQ6IHVua25vd25cblxuICBzZXRJZChpZDogdW5rbm93bikge1xuICAgIHRoaXMuSWQgPSBpZFxuICB9XG5cbiAgYWRkRXZlbnQobmV3ZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLkV2ZW50KSB7XG4gICAgICB0aGlzLkV2ZW50ID0gW11cbiAgICB9XG4gICAgdGhpcy5FdmVudC5wdXNoKG5ld2V2ZW50KVxuICB9XG5cbiAgYWRkRmlsdGVyU3VmZml4KHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLkZpbHRlcikge1xuICAgICAgdGhpcy5GaWx0ZXIgPSB7IFMzS2V5OiB7IEZpbHRlclJ1bGU6IFtdIH0gfVxuICAgIH1cbiAgICB0aGlzLkZpbHRlci5TM0tleS5GaWx0ZXJSdWxlLnB1c2goeyBOYW1lOiAnc3VmZml4JywgVmFsdWU6IHN1ZmZpeCB9KVxuICB9XG5cbiAgYWRkRmlsdGVyUHJlZml4KHByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLkZpbHRlcikge1xuICAgICAgdGhpcy5GaWx0ZXIgPSB7IFMzS2V5OiB7IEZpbHRlclJ1bGU6IFtdIH0gfVxuICAgIH1cbiAgICB0aGlzLkZpbHRlci5TM0tleS5GaWx0ZXJSdWxlLnB1c2goeyBOYW1lOiAncHJlZml4JywgVmFsdWU6IHByZWZpeCB9KVxuICB9XG59XG5cbi8vIDEuIFRvcGljIChzaW1wbGUgbm90aWZpY2F0aW9uIHNlcnZpY2UpXG5leHBvcnQgY2xhc3MgVG9waWNDb25maWcgZXh0ZW5kcyBUYXJnZXRDb25maWcge1xuICBwcml2YXRlIFRvcGljOiBzdHJpbmdcblxuICBjb25zdHJ1Y3Rvcihhcm46IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLlRvcGljID0gYXJuXG4gIH1cbn1cblxuLy8gMi4gUXVldWUgKHNpbXBsZSBxdWV1ZSBzZXJ2aWNlKVxuZXhwb3J0IGNsYXNzIFF1ZXVlQ29uZmlnIGV4dGVuZHMgVGFyZ2V0Q29uZmlnIHtcbiAgcHJpdmF0ZSBRdWV1ZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoYXJuOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5RdWV1ZSA9IGFyblxuICB9XG59XG5cbi8vIDMuIENsb3VkRnJvbnQgKGxhbWJkYSBmdW5jdGlvbilcbmV4cG9ydCBjbGFzcyBDbG91ZEZ1bmN0aW9uQ29uZmlnIGV4dGVuZHMgVGFyZ2V0Q29uZmlnIHtcbiAgcHJpdmF0ZSBDbG91ZEZ1bmN0aW9uOiBzdHJpbmdcblxuICBjb25zdHJ1Y3Rvcihhcm46IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLkNsb3VkRnVuY3Rpb24gPSBhcm5cbiAgfVxufVxuXG4vLyBOb3RpZmljYXRpb24gY29uZmlnIC0gYXJyYXkgb2YgdGFyZ2V0IGNvbmZpZ3MuXG4vLyBUYXJnZXQgY29uZmlncyBjYW4gYmVcbi8vIDEuIFRvcGljIChzaW1wbGUgbm90aWZpY2F0aW9uIHNlcnZpY2UpXG4vLyAyLiBRdWV1ZSAoc2ltcGxlIHF1ZXVlIHNlcnZpY2UpXG4vLyAzLiBDbG91ZEZyb250IChsYW1iZGEgZnVuY3Rpb24pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uQ29uZmlnIHtcbiAgcHJpdmF0ZSBUb3BpY0NvbmZpZ3VyYXRpb24/OiBUYXJnZXRDb25maWdbXVxuICBwcml2YXRlIENsb3VkRnVuY3Rpb25Db25maWd1cmF0aW9uPzogVGFyZ2V0Q29uZmlnW11cbiAgcHJpdmF0ZSBRdWV1ZUNvbmZpZ3VyYXRpb24/OiBUYXJnZXRDb25maWdbXVxuXG4gIGFkZCh0YXJnZXQ6IFRhcmdldENvbmZpZykge1xuICAgIGxldCBpbnN0YW5jZTogVGFyZ2V0Q29uZmlnW10gfCB1bmRlZmluZWRcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVG9waWNDb25maWcpIHtcbiAgICAgIGluc3RhbmNlID0gdGhpcy5Ub3BpY0NvbmZpZ3VyYXRpb24gPz89IFtdXG4gICAgfVxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBRdWV1ZUNvbmZpZykge1xuICAgICAgaW5zdGFuY2UgPSB0aGlzLlF1ZXVlQ29uZmlndXJhdGlvbiA/Pz0gW11cbiAgICB9XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIENsb3VkRnVuY3Rpb25Db25maWcpIHtcbiAgICAgIGluc3RhbmNlID0gdGhpcy5DbG91ZEZ1bmN0aW9uQ29uZmlndXJhdGlvbiA/Pz0gW11cbiAgICB9XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS5wdXNoKHRhcmdldClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVJOID0gKHBhcnRpdGlvbjogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCBhY2NvdW50SWQ6IHN0cmluZywgcmVzb3VyY2U6IHN0cmluZykgPT4ge1xuICByZXR1cm4gJ2FybjonICsgcGFydGl0aW9uICsgJzonICsgc2VydmljZSArICc6JyArIHJlZ2lvbiArICc6JyArIGFjY291bnRJZCArICc6JyArIHJlc291cmNlXG59XG5leHBvcnQgY29uc3QgT2JqZWN0Q3JlYXRlZEFsbCA9ICdzMzpPYmplY3RDcmVhdGVkOionXG5leHBvcnQgY29uc3QgT2JqZWN0Q3JlYXRlZFB1dCA9ICdzMzpPYmplY3RDcmVhdGVkOlB1dCdcbmV4cG9ydCBjb25zdCBPYmplY3RDcmVhdGVkUG9zdCA9ICdzMzpPYmplY3RDcmVhdGVkOlBvc3QnXG5leHBvcnQgY29uc3QgT2JqZWN0Q3JlYXRlZENvcHkgPSAnczM6T2JqZWN0Q3JlYXRlZDpDb3B5J1xuZXhwb3J0IGNvbnN0IE9iamVjdENyZWF0ZWRDb21wbGV0ZU11bHRpcGFydFVwbG9hZCA9ICdzMzpPYmplY3RDcmVhdGVkOkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJ1xuZXhwb3J0IGNvbnN0IE9iamVjdFJlbW92ZWRBbGwgPSAnczM6T2JqZWN0UmVtb3ZlZDoqJ1xuZXhwb3J0IGNvbnN0IE9iamVjdFJlbW92ZWREZWxldGUgPSAnczM6T2JqZWN0UmVtb3ZlZDpEZWxldGUnXG5leHBvcnQgY29uc3QgT2JqZWN0UmVtb3ZlZERlbGV0ZU1hcmtlckNyZWF0ZWQgPSAnczM6T2JqZWN0UmVtb3ZlZDpEZWxldGVNYXJrZXJDcmVhdGVkJ1xuZXhwb3J0IGNvbnN0IE9iamVjdFJlZHVjZWRSZWR1bmRhbmN5TG9zdE9iamVjdCA9ICdzMzpSZWR1Y2VkUmVkdW5kYW5jeUxvc3RPYmplY3QnXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25FdmVudCA9XG4gIHwgJ3MzOk9iamVjdENyZWF0ZWQ6KidcbiAgfCAnczM6T2JqZWN0Q3JlYXRlZDpQdXQnXG4gIHwgJ3MzOk9iamVjdENyZWF0ZWQ6UG9zdCdcbiAgfCAnczM6T2JqZWN0Q3JlYXRlZDpDb3B5J1xuICB8ICdzMzpPYmplY3RDcmVhdGVkOkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJ1xuICB8ICdzMzpPYmplY3RSZW1vdmVkOionXG4gIHwgJ3MzOk9iamVjdFJlbW92ZWQ6RGVsZXRlJ1xuICB8ICdzMzpPYmplY3RSZW1vdmVkOkRlbGV0ZU1hcmtlckNyZWF0ZWQnXG4gIHwgJ3MzOlJlZHVjZWRSZWR1bmRhbmN5TG9zdE9iamVjdCdcbiAgfCAnczM6VGVzdEV2ZW50J1xuICB8ICdzMzpPYmplY3RSZXN0b3JlOlBvc3QnXG4gIHwgJ3MzOk9iamVjdFJlc3RvcmU6Q29tcGxldGVkJ1xuICB8ICdzMzpSZXBsaWNhdGlvbjpPcGVyYXRpb25GYWlsZWRSZXBsaWNhdGlvbidcbiAgfCAnczM6UmVwbGljYXRpb246T3BlcmF0aW9uTWlzc2VkVGhyZXNob2xkJ1xuICB8ICdzMzpSZXBsaWNhdGlvbjpPcGVyYXRpb25SZXBsaWNhdGVkQWZ0ZXJUaHJlc2hvbGQnXG4gIHwgJ3MzOlJlcGxpY2F0aW9uOk9wZXJhdGlvbk5vdFRyYWNrZWQnXG4gIHwgc3RyaW5nIC8vIHB1dCBzdHJpbmcgYXQgbGVhc3Qgc28gYXV0by1jb21wbGV0ZSBjb3VsZCB3b3JrXG5cbi8vIFRPRE86IHR5cGUgdGhpc1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUmVjb3JkID0gdW5rbm93blxuLy8gUG9sbCBmb3Igbm90aWZpY2F0aW9ucywgdXNlZCBpbiAjbGlzdGVuQnVja2V0Tm90aWZpY2F0aW9uLlxuLy8gTGlzdGVuaW5nIGNvbnN0aXR1dGVzIHJlcGVhdGVkbHkgcmVxdWVzdGluZyBzMyB3aGV0aGVyIG9yIG5vdCBhbnlcbi8vIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC5cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25Qb2xsZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8e1xuICBub3RpZmljYXRpb246IChldmVudDogTm90aWZpY2F0aW9uUmVjb3JkKSA9PiB2b2lkXG4gIGVycm9yOiAoZXJyb3I6IHVua25vd24pID0+IHZvaWRcbn0+IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IFR5cGVkQ2xpZW50XG4gIHByaXZhdGUgYnVja2V0TmFtZTogc3RyaW5nXG4gIHByaXZhdGUgcHJlZml4OiBzdHJpbmdcbiAgcHJpdmF0ZSBzdWZmaXg6IHN0cmluZ1xuICBwcml2YXRlIGV2ZW50czogTm90aWZpY2F0aW9uRXZlbnRbXVxuICBwcml2YXRlIGVuZGluZzogYm9vbGVhblxuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogVHlwZWRDbGllbnQsIGJ1Y2tldE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nLCBldmVudHM6IE5vdGlmaWNhdGlvbkV2ZW50W10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnVja2V0TmFtZSA9IGJ1Y2tldE5hbWVcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeFxuICAgIHRoaXMuc3VmZml4ID0gc3VmZml4XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHNcblxuICAgIHRoaXMuZW5kaW5nID0gZmFsc2VcbiAgfVxuXG4gIC8vIFN0YXJ0cyB0aGUgcG9sbGluZy5cbiAgc3RhcnQoKSB7XG4gICAgdGhpcy5lbmRpbmcgPSBmYWxzZVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcygpXG4gICAgfSlcbiAgfVxuXG4gIC8vIFN0b3BzIHRoZSBwb2xsaW5nLlxuICBzdG9wKCkge1xuICAgIHRoaXMuZW5kaW5nID0gdHJ1ZVxuICB9XG5cbiAgY2hlY2tGb3JDaGFuZ2VzKCkge1xuICAgIC8vIERvbid0IGNvbnRpbnVlIGlmIHdlJ3JlIGxvb3BpbmcgYWdhaW4gYnV0IGFyZSBjYW5jZWxsZWQuXG4gICAgaWYgKHRoaXMuZW5kaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2QgPSAnR0VUJ1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBbXVxuICAgIGlmICh0aGlzLnByZWZpeCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gdXJpRXNjYXBlKHRoaXMucHJlZml4KVxuICAgICAgcXVlcmllcy5wdXNoKGBwcmVmaXg9JHtwcmVmaXh9YClcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VmZml4KSB7XG4gICAgICBjb25zdCBzdWZmaXggPSB1cmlFc2NhcGUodGhpcy5zdWZmaXgpXG4gICAgICBxdWVyaWVzLnB1c2goYHN1ZmZpeD0ke3N1ZmZpeH1gKVxuICAgIH1cbiAgICBpZiAodGhpcy5ldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnRzLmZvckVhY2goKHMzZXZlbnQpID0+IHF1ZXJpZXMucHVzaCgnZXZlbnRzPScgKyB1cmlFc2NhcGUoczNldmVudCkpKVxuICAgIH1cbiAgICBxdWVyaWVzLnNvcnQoKVxuXG4gICAgbGV0IHF1ZXJ5ID0gJydcbiAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVyeSA9IGAke3F1ZXJpZXMuam9pbignJicpfWBcbiAgICB9XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5jbGllbnQucmVnaW9uIHx8IERFRkFVTFRfUkVHSU9OXG5cbiAgICB0aGlzLmNsaWVudC5tYWtlUmVxdWVzdEFzeW5jKHsgbWV0aG9kLCBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsIHF1ZXJ5IH0sICcnLCBbMjAwXSwgcmVnaW9uKS50aGVuKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGFzbSA9IGpzb25MaW5lUGFyc2VyLm1ha2UoKVxuXG4gICAgICAgIHBpcGVzZXR1cChyZXNwb25zZSwgYXNtKVxuICAgICAgICAgIC5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyBEYXRhIGlzIGZsdXNoZWQgcGVyaW9kaWNhbGx5IChldmVyeSA1IHNlY29uZHMpLCBzbyB3ZSBzaG91bGRcbiAgICAgICAgICAgIC8vIGhhbmRsZSBpdCBhZnRlciBmbHVzaGluZyBmcm9tIHRoZSBKU09OIHBhcnNlci5cbiAgICAgICAgICAgIGxldCByZWNvcmRzID0gZGF0YS52YWx1ZS5SZWNvcmRzXG4gICAgICAgICAgICAvLyBJZiBudWxsICg9IG5vIHJlY29yZHMpLCBjaGFuZ2UgdG8gYW4gZW1wdHkgYXJyYXkuXG4gICAgICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgICAgcmVjb3JkcyA9IFtdXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbm90aWZpY2F0aW9ucyBhbmQgZW1pdCB0aGVtIGluZGl2aWR1YWxseS5cbiAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBOb3RpZmljYXRpb25SZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lbWl0KCdub3RpZmljYXRpb24nLCByZWNvcmQpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBkb25lLCBzdG9wLlxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kaW5nKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlPy5kZXN0cm95KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignZXJyb3InLCAoZSkgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGUpKVxuICAgICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRG8gaXQgYWdhaW4sIGlmIHdlIGhhdmVuJ3QgY2FuY2VsbGVkIHlldC5cbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcygpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBlKVxuICAgICAgfSxcbiAgICApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFnQkEsSUFBQUEsYUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFB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

@@ -6,24 +6,14 @@ "use strict";

});
exports.bucketEncryptionTransformer = bucketEncryptionTransformer;
exports.bucketVersioningTransformer = bucketVersioningTransformer;
exports.getBucketNotificationTransformer = getBucketNotificationTransformer;
exports.getCompleteMultipartTransformer = getCompleteMultipartTransformer;
exports.getConcater = getConcater;
exports.getCopyObjectTransformer = getCopyObjectTransformer;
exports.getHashSummer = getHashSummer;
exports.getListMultipartTransformer = getListMultipartTransformer;
exports.getListObjectsTransformer = getListObjectsTransformer;
exports.getListObjectsV2Transformer = getListObjectsV2Transformer;
exports.getListObjectsV2WithMetadataTransformer = getListObjectsV2WithMetadataTransformer;
exports.getNotificationTransformer = getNotificationTransformer;
exports.getTagsTransformer = getTagsTransformer;
exports.lifecycleTransformer = lifecycleTransformer;
exports.objectLegalHoldTransformer = objectLegalHoldTransformer;
exports.objectLockTransformer = objectLockTransformer;
exports.objectRetentionTransformer = objectRetentionTransformer;
exports.removeObjectsTransformer = removeObjectsTransformer;
exports.selectObjectContentTransformer = selectObjectContentTransformer;
exports.uploadPartTransformer = uploadPartTransformer;
var Crypto = _interopRequireWildcard(require("crypto"), true);
var _jsonStream = require("json-stream");
var _through = require("through2");

@@ -123,7 +113,2 @@ var _helper = require("./internal/helper.js");

// Parses listMultipartUploads response.
function getListMultipartTransformer() {
return getConcater(xmlParsers.parseListMultipart);
}
// Parses listObjects response.

@@ -144,7 +129,2 @@ function getListObjectsTransformer() {

// Parses completeMultipartUpload response.
function getCompleteMultipartTransformer() {
return getConcater(xmlParsers.parseCompleteMultipart);
}
// Parses GET/SET BucketNotification response

@@ -154,26 +134,5 @@ function getBucketNotificationTransformer() {

}
// Parses a notification.
function getNotificationTransformer() {
// This will parse and return each object.
return new _jsonStream();
}
function bucketVersioningTransformer() {
return getConcater(xmlParsers.parseBucketVersioningConfig);
}
function getTagsTransformer() {
return getConcater(xmlParsers.parseTagging);
}
function lifecycleTransformer() {
return getConcater(xmlParsers.parseLifecycleConfig);
}
function objectLockTransformer() {
return getConcater(xmlParsers.parseObjectLockConfig);
}
function objectRetentionTransformer() {
return getConcater(xmlParsers.parseObjectRetentionConfig);
}
function bucketEncryptionTransformer() {
return getConcater(xmlParsers.parseBucketEncryptionConfig);
}
function objectLegalHoldTransformer() {

@@ -185,8 +144,5 @@ return getConcater(xmlParsers.parseObjectLegalHoldConfig);

}
function selectObjectContentTransformer() {
return getConcater();
}
function removeObjectsTransformer() {
return getConcater(xmlParsers.removeObjectsParser);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfanNvblN0cmVhbSIsIl90aHJvdWdoIiwiX2hlbHBlciIsInhtbFBhcnNlcnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiZ2V0Q29uY2F0ZXIiLCJwYXJzZXIiLCJlbWl0RXJyb3IiLCJvYmplY3RNb2RlIiwiYnVmcyIsImlzRnVuY3Rpb24iLCJUeXBlRXJyb3IiLCJUaHJvdWdoMiIsImNodW5rIiwiZW5jIiwiY2IiLCJwdXNoIiwiQnVmZmVyIiwiY29uY2F0IiwidG9TdHJpbmciLCJsZW5ndGgiLCJnZXRIYXNoU3VtbWVyIiwiZW5hYmxlU0hBMjU2IiwibWQ1IiwiY3JlYXRlSGFzaCIsInNoYTI1NiIsInVwZGF0ZSIsIm1kNXN1bSIsInNoYTI1NnN1bSIsImRpZ2VzdCIsImhhc2hEYXRhIiwiZ2V0Q29weU9iamVjdFRyYW5zZm9ybWVyIiwicGFyc2VDb3B5T2JqZWN0IiwiZ2V0TGlzdE11bHRpcGFydFRyYW5zZm9ybWVyIiwicGFyc2VMaXN0TXVsdGlwYXJ0IiwiZ2V0TGlzdE9iamVjdHNUcmFuc2Zvcm1lciIsInBhcnNlTGlzdE9iamVjdHMiLCJnZXRMaXN0T2JqZWN0c1YyVHJhbnNmb3JtZXIiLCJwYXJzZUxpc3RPYmplY3RzVjIiLCJnZXRMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhVHJhbnNmb3JtZXIiLCJwYXJzZUxpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGEiLCJnZXRDb21wbGV0ZU11bHRpcGFydFRyYW5zZm9ybWVyIiwicGFyc2VDb21wbGV0ZU11bHRpcGFydCIsImdldEJ1Y2tldE5vdGlmaWNhdGlvblRyYW5zZm9ybWVyIiwicGFyc2VCdWNrZXROb3RpZmljYXRpb24iLCJnZXROb3RpZmljYXRpb25UcmFuc2Zvcm1lciIsIkpTT05QYXJzZXIiLCJidWNrZXRWZXJzaW9uaW5nVHJhbnNmb3JtZXIiLCJwYXJzZUJ1Y2tldFZlcnNpb25pbmdDb25maWciLCJnZXRUYWdzVHJhbnNmb3JtZXIiLCJwYXJzZVRhZ2dpbmciLCJsaWZlY3ljbGVUcmFuc2Zvcm1lciIsInBhcnNlTGlmZWN5Y2xlQ29uZmlnIiwib2JqZWN0TG9ja1RyYW5zZm9ybWVyIiwicGFyc2VPYmplY3RMb2NrQ29uZmlnIiwib2JqZWN0UmV0ZW50aW9uVHJhbnNmb3JtZXIiLCJwYXJzZU9iamVjdFJldGVudGlvbkNvbmZpZyIsImJ1Y2tldEVuY3J5cHRpb25UcmFuc2Zvcm1lciIsInBhcnNlQnVja2V0RW5jcnlwdGlvbkNvbmZpZyIsIm9iamVjdExlZ2FsSG9sZFRyYW5zZm9ybWVyIiwicGFyc2VPYmplY3RMZWdhbEhvbGRDb25maWciLCJ1cGxvYWRQYXJ0VHJhbnNmb3JtZXIiLCJ1cGxvYWRQYXJ0UGFyc2VyIiwic2VsZWN0T2JqZWN0Q29udGVudFRyYW5zZm9ybWVyIiwicmVtb3ZlT2JqZWN0c1RyYW5zZm9ybWVyIiwicmVtb3ZlT2JqZWN0c1BhcnNlciJdLCJzb3VyY2VzIjpbInRyYW5zZm9ybWVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTWluSU8gSmF2YXNjcmlwdCBMaWJyYXJ5IGZvciBBbWF6b24gUzMgQ29tcGF0aWJsZSBDbG91ZCBTdG9yYWdlLCAoQykgMjAxNSwgMjAxNiBNaW5JTywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBDcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nXG5cbmltcG9ydCBKU09OUGFyc2VyIGZyb20gJ2pzb24tc3RyZWFtJ1xuaW1wb3J0IFRocm91Z2gyIGZyb20gJ3Rocm91Z2gyJ1xuXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pbnRlcm5hbC9oZWxwZXIudHMnXG5pbXBvcnQgKiBhcyB4bWxQYXJzZXJzIGZyb20gJy4veG1sLXBhcnNlcnMuanMnXG5cbi8vIGdldENvbmNhdGVyIHJldHVybnMgYSBzdHJlYW0gdGhhdCBjb25jYXRlbmF0ZXMgdGhlIGlucHV0IGFuZCBlbWl0c1xuLy8gdGhlIGNvbmNhdGVuYXRlZCBvdXRwdXQgd2hlbiAnZW5kJyBoYXMgcmVhY2hlZC4gSWYgYW4gb3B0aW9uYWxcbi8vIHBhcnNlciBmdW5jdGlvbiBpcyBwYXNzZWQgdXBvbiByZWFjaGluZyB0aGUgJ2VuZCcgb2YgdGhlIHN0cmVhbSxcbi8vIGBwYXJzZXIoY29uY2F0ZW5hdGVkX2RhdGEpYCB3aWxsIGJlIGVtaXR0ZWQuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uY2F0ZXIocGFyc2VyLCBlbWl0RXJyb3IpIHtcbiAgdmFyIG9iamVjdE1vZGUgPSBmYWxzZVxuICB2YXIgYnVmcyA9IFtdXG5cbiAgaWYgKHBhcnNlciAmJiAhaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIHNob3VsZCBiZSBvZiB0eXBlIFwiZnVuY3Rpb25cIicpXG4gIH1cblxuICBpZiAocGFyc2VyKSB7XG4gICAgb2JqZWN0TW9kZSA9IHRydWVcbiAgfVxuXG4gIHJldHVybiBUaHJvdWdoMihcbiAgICB7IG9iamVjdE1vZGUgfSxcbiAgICBmdW5jdGlvbiAoY2h1bmssIGVuYywgY2IpIHtcbiAgICAgIGJ1ZnMucHVzaChjaHVuaylcbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZ1bmN0aW9uIChjYikge1xuICAgICAgaWYgKGVtaXRFcnJvcikge1xuICAgICAgICBjYihwYXJzZXIoQnVmZmVyLmNvbmNhdChidWZzKS50b1N0cmluZygpKSlcbiAgICAgICAgLy8gY2IoZSkgd291bGQgbWVhbiB3ZSBoYXZlIHRvIGVtaXQgJ2VuZCcgYnkgZXhwbGljaXRseSBjYWxsaW5nIHRoaXMucHVzaChudWxsKVxuICAgICAgICB0aGlzLnB1c2gobnVsbClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYnVmcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHBhcnNlcikge1xuICAgICAgICAgIHRoaXMucHVzaChwYXJzZXIoQnVmZmVyLmNvbmNhdChidWZzKS50b1N0cmluZygpKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnB1c2goQnVmZmVyLmNvbmNhdChidWZzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH0sXG4gIClcbn1cblxuLy8gQSB0aHJvdWdoIHN0cmVhbSB0aGF0IGNhbGN1bGF0ZXMgbWQ1c3VtIGFuZCBzaGEyNTZzdW1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYXNoU3VtbWVyKGVuYWJsZVNIQTI1Nikge1xuICB2YXIgbWQ1ID0gQ3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpXG4gIHZhciBzaGEyNTYgPSBDcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcblxuICByZXR1cm4gVGhyb3VnaDIub2JqKFxuICAgIGZ1bmN0aW9uIChjaHVuaywgZW5jLCBjYikge1xuICAgICAgaWYgKGVuYWJsZVNIQTI1Nikge1xuICAgICAgICBzaGEyNTYudXBkYXRlKGNodW5rKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWQ1LnVwZGF0ZShjaHVuaylcbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZ1bmN0aW9uIChjYikge1xuICAgICAgdmFyIG1kNXN1bSA9ICcnXG4gICAgICB2YXIgc2hhMjU2c3VtID0gJydcbiAgICAgIGlmIChlbmFibGVTSEEyNTYpIHtcbiAgICAgICAgc2hhMjU2c3VtID0gc2hhMjU2LmRpZ2VzdCgnaGV4JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1kNXN1bSA9IG1kNS5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICB2YXIgaGFzaERhdGEgPSB7IG1kNXN1bSwgc2hhMjU2c3VtIH1cbiAgICAgIHRoaXMucHVzaChoYXNoRGF0YSlcbiAgICAgIHRoaXMucHVzaChudWxsKVxuICAgICAgY2IoKVxuICAgIH0sXG4gIClcbn1cblxuLy8gRm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gYSBzdHJlYW0gb2JqZWN0IHRoYXQgcGFyc2VzIFhNTFxuLy8gYW5kIGVtaXRzIHN1aXRhYmxlIEphdmFzY3JpcHQgb2JqZWN0cy5cblxuLy8gUGFyc2VzIENvcHlPYmplY3QgcmVzcG9uc2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29weU9iamVjdFRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUNvcHlPYmplY3QpXG59XG5cbi8vIFBhcnNlcyBsaXN0TXVsdGlwYXJ0VXBsb2FkcyByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0TXVsdGlwYXJ0VHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE11bHRpcGFydClcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHJlc3BvbnNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHMpXG59XG5cbi8vIFBhcnNlcyBsaXN0T2JqZWN0cyByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0T2JqZWN0c1YyVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHNWMilcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHdpdGggbWV0YWRhdGEgcmVzcG9uc2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUxpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGEpXG59XG5cbi8vIFBhcnNlcyBjb21wbGV0ZU11bHRpcGFydFVwbG9hZCByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wbGV0ZU11bHRpcGFydFRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUNvbXBsZXRlTXVsdGlwYXJ0KVxufVxuXG4vLyBQYXJzZXMgR0VUL1NFVCBCdWNrZXROb3RpZmljYXRpb24gcmVzcG9uc2VcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWNrZXROb3RpZmljYXRpb25UcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VCdWNrZXROb3RpZmljYXRpb24pXG59XG5cbi8vIFBhcnNlcyBhIG5vdGlmaWNhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25UcmFuc2Zvcm1lcigpIHtcbiAgLy8gVGhpcyB3aWxsIHBhcnNlIGFuZCByZXR1cm4gZWFjaCBvYmplY3QuXG4gIHJldHVybiBuZXcgSlNPTlBhcnNlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWNrZXRWZXJzaW9uaW5nVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlQnVja2V0VmVyc2lvbmluZ0NvbmZpZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ3NUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VUYWdnaW5nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlmZWN5Y2xlVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlmZWN5Y2xlQ29uZmlnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0TG9ja1RyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZU9iamVjdExvY2tDb25maWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RSZXRlbnRpb25UcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VPYmplY3RSZXRlbnRpb25Db25maWcpXG59XG5leHBvcnQgZnVuY3Rpb24gYnVja2V0RW5jcnlwdGlvblRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUJ1Y2tldEVuY3J5cHRpb25Db25maWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RMZWdhbEhvbGRUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucGFyc2VPYmplY3RMZWdhbEhvbGRDb25maWcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRQYXJ0VHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnVwbG9hZFBhcnRQYXJzZXIpXG59XG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0T2JqZWN0Q29udGVudFRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT2JqZWN0c1RyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5yZW1vdmVPYmplY3RzUGFyc2VyKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsdUJBQUEsQ0FBQUMsT0FBQTtBQUE4QyxTQUFBSyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBUCx3QkFBQVcsR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLG9CQUFBQSxHQUFBLHdCQUFBQSxHQUFBLDRCQUFBRSxPQUFBLEVBQUFGLEdBQUEsVUFBQUcsS0FBQSxHQUFBUix3QkFBQSxDQUFBQyxXQUFBLE9BQUFPLEtBQUEsSUFBQUEsS0FBQSxDQUFBQyxHQUFBLENBQUFKLEdBQUEsWUFBQUcsS0FBQSxDQUFBRSxHQUFBLENBQUFMLEdBQUEsU0FBQU0sTUFBQSxXQUFBQyxxQkFBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxHQUFBLElBQUFYLEdBQUEsUUFBQVcsR0FBQSxrQkFBQUgsTUFBQSxDQUFBSSxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZCxHQUFBLEVBQUFXLEdBQUEsU0FBQUksSUFBQSxHQUFBUixxQkFBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFWLEdBQUEsRUFBQVcsR0FBQSxjQUFBSSxJQUFBLEtBQUFBLElBQUEsQ0FBQVYsR0FBQSxJQUFBVSxJQUFBLENBQUFDLEdBQUEsS0FBQVIsTUFBQSxDQUFBQyxjQUFBLENBQUFILE1BQUEsRUFBQUssR0FBQSxFQUFBSSxJQUFBLFlBQUFULE1BQUEsQ0FBQUssR0FBQSxJQUFBWCxHQUFBLENBQUFXLEdBQUEsU0FBQUwsTUFBQSxDQUFBSixPQUFBLEdBQUFGLEdBQUEsTUFBQUcsS0FBQSxJQUFBQSxLQUFBLENBQUFhLEdBQUEsQ0FBQWhCLEdBQUEsRUFBQU0sTUFBQSxZQUFBQSxNQUFBO0FBdEI5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTVyxXQUFXQSxDQUFDQyxNQUFNLEVBQUVDLFNBQVMsRUFBRTtFQUM3QyxJQUFJQyxVQUFVLEdBQUcsS0FBSztFQUN0QixJQUFJQyxJQUFJLEdBQUcsRUFBRTtFQUViLElBQUlILE1BQU0sSUFBSSxDQUFDLElBQUFJLGtCQUFVLEVBQUNKLE1BQU0sQ0FBQyxFQUFFO0lBQ2pDLE1BQU0sSUFBSUssU0FBUyxDQUFDLHFDQUFxQyxDQUFDO0VBQzVEO0VBRUEsSUFBSUwsTUFBTSxFQUFFO0lBQ1ZFLFVBQVUsR0FBRyxJQUFJO0VBQ25CO0VBRUEsT0FBT0ksUUFBUSxDQUNiO0lBQUVKO0VBQVcsQ0FBQyxFQUNkLFVBQVVLLEtBQUssRUFBRUMsR0FBRyxFQUFFQyxFQUFFLEVBQUU7SUFDeEJOLElBQUksQ0FBQ08sSUFBSSxDQUFDSCxLQUFLLENBQUM7SUFDaEJFLEVBQUUsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxFQUNELFVBQVVBLEVBQUUsRUFBRTtJQUNaLElBQUlSLFNBQVMsRUFBRTtNQUNiUSxFQUFFLENBQUNULE1BQU0sQ0FBQ1csTUFBTSxDQUFDQyxNQUFNLENBQUNULElBQUksQ0FBQyxDQUFDVSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMUM7TUFDQSxJQUFJLENBQUNILElBQUksQ0FBQyxJQUFJLENBQUM7TUFDZjtJQUNGO0lBQ0EsSUFBSVAsSUFBSSxDQUFDVyxNQUFNLEVBQUU7TUFDZixJQUFJZCxNQUFNLEVBQUU7UUFDVixJQUFJLENBQUNVLElBQUksQ0FBQ1YsTUFBTSxDQUFDVyxNQUFNLENBQUNDLE1BQU0sQ0FBQ1QsSUFBSSxDQUFDLENBQUNVLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNuRCxDQUFDLE1BQU07UUFDTCxJQUFJLENBQUNILElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUNULElBQUksQ0FBQyxDQUFDO01BQ2hDO0lBQ0Y7SUFDQU0sRUFBRSxDQUFDLENBQUM7RUFDTixDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNPLFNBQVNNLGFBQWFBLENBQUNDLFlBQVksRUFBRTtFQUMxQyxJQUFJQyxHQUFHLEdBQUcvQyxNQUFNLENBQUNnRCxVQUFVLENBQUMsS0FBSyxDQUFDO0VBQ2xDLElBQUlDLE1BQU0sR0FBR2pELE1BQU0sQ0FBQ2dELFVBQVUsQ0FBQyxRQUFRLENBQUM7RUFFeEMsT0FBT1osUUFBUSxDQUFDeEIsR0FBRyxDQUNqQixVQUFVeUIsS0FBSyxFQUFFQyxHQUFHLEVBQUVDLEVBQUUsRUFBRTtJQUN4QixJQUFJTyxZQUFZLEVBQUU7TUFDaEJHLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDYixLQUFLLENBQUM7SUFDdEIsQ0FBQyxNQUFNO01BQ0xVLEdBQUcsQ0FBQ0csTUFBTSxDQUFDYixLQUFLLENBQUM7SUFDbkI7SUFDQUUsRUFBRSxDQUFDLENBQUM7RUFDTixDQUFDLEVBQ0QsVUFBVUEsRUFBRSxFQUFFO0lBQ1osSUFBSVksTUFBTSxHQUFHLEVBQUU7SUFDZixJQUFJQyxTQUFTLEdBQUcsRUFBRTtJQUNsQixJQUFJTixZQUFZLEVBQUU7TUFDaEJNLFNBQVMsR0FBR0gsTUFBTSxDQUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUMsTUFBTTtNQUNMRixNQUFNLEdBQUdKLEdBQUcsQ0FBQ00sTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUMvQjtJQUNBLElBQUlDLFFBQVEsR0FBRztNQUFFSCxNQUFNO01BQUVDO0lBQVUsQ0FBQztJQUNwQyxJQUFJLENBQUNaLElBQUksQ0FBQ2MsUUFBUSxDQUFDO0lBQ25CLElBQUksQ0FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNmRCxFQUFFLENBQUMsQ0FBQztFQUNOLENBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDTyxTQUFTZ0Isd0JBQXdCQSxDQUFBLEVBQUc7RUFDekMsT0FBTzFCLFdBQVcsQ0FBQ3ZCLFVBQVUsQ0FBQ2tELGVBQWUsQ0FBQztBQUNoRDs7QUFFQTtBQUNPLFNBQVNDLDJCQUEyQkEsQ0FBQSxFQUFHO0VBQzVDLE9BQU81QixXQUFXLENBQUN2QixVQUFVLENBQUNvRCxrQkFBa0IsQ0FBQztBQUNuRDs7QUFFQTtBQUNPLFNBQVNDLHlCQUF5QkEsQ0FBQSxFQUFHO0VBQzFDLE9BQU85QixXQUFXLENBQUN2QixVQUFVLENBQUNzRCxnQkFBZ0IsQ0FBQztBQUNqRDs7QUFFQTtBQUNPLFNBQVNDLDJCQUEyQkEsQ0FBQSxFQUFHO0VBQzVDLE9BQU9oQyxXQUFXLENBQUN2QixVQUFVLENBQUN3RCxrQkFBa0IsQ0FBQztBQUNuRDs7QUFFQTtBQUNPLFNBQVNDLHVDQUF1Q0EsQ0FBQSxFQUFHO0VBQ3hELE9BQU9sQyxXQUFXLENBQUN2QixVQUFVLENBQUMwRCw4QkFBOEIsQ0FBQztBQUMvRDs7QUFFQTtBQUNPLFNBQVNDLCtCQUErQkEsQ0FBQSxFQUFHO0VBQ2hELE9BQU9wQyxXQUFXLENBQUN2QixVQUFVLENBQUM0RCxzQkFBc0IsQ0FBQztBQUN2RDs7QUFFQTtBQUNPLFNBQVNDLGdDQUFnQ0EsQ0FBQSxFQUFHO0VBQ2pELE9BQU90QyxXQUFXLENBQUN2QixVQUFVLENBQUM4RCx1QkFBdUIsQ0FBQztBQUN4RDs7QUFFQTtBQUNPLFNBQVNDLDBCQUEwQkEsQ0FBQSxFQUFHO0VBQzNDO0VBQ0EsT0FBTyxJQUFJQyxXQUFVLENBQUMsQ0FBQztBQUN6QjtBQUVPLFNBQVNDLDJCQUEyQkEsQ0FBQSxFQUFHO0VBQzVDLE9BQU8xQyxXQUFXLENBQUN2QixVQUFVLENBQUNrRSwyQkFBMkIsQ0FBQztBQUM1RDtBQUVPLFNBQVNDLGtCQUFrQkEsQ0FBQSxFQUFHO0VBQ25DLE9BQU81QyxXQUFXLENBQUN2QixVQUFVLENBQUNvRSxZQUFZLENBQUM7QUFDN0M7QUFFTyxTQUFTQyxvQkFBb0JBLENBQUEsRUFBRztFQUNyQyxPQUFPOUMsV0FBVyxDQUFDdkIsVUFBVSxDQUFDc0Usb0JBQW9CLENBQUM7QUFDckQ7QUFFTyxTQUFTQyxxQkFBcUJBLENBQUEsRUFBRztFQUN0QyxPQUFPaEQsV0FBVyxDQUFDdkIsVUFBVSxDQUFDd0UscUJBQXFCLENBQUM7QUFDdEQ7QUFFTyxTQUFTQywwQkFBMEJBLENBQUEsRUFBRztFQUMzQyxPQUFPbEQsV0FBVyxDQUFDdkIsVUFBVSxDQUFDMEUsMEJBQTBCLENBQUM7QUFDM0Q7QUFDTyxTQUFTQywyQkFBMkJBLENBQUEsRUFBRztFQUM1QyxPQUFPcEQsV0FBVyxDQUFDdkIsVUFBVSxDQUFDNEUsMkJBQTJCLENBQUM7QUFDNUQ7QUFFTyxTQUFTQywwQkFBMEJBLENBQUEsRUFBRztFQUMzQyxPQUFPdEQsV0FBVyxDQUFDdkIsVUFBVSxDQUFDOEUsMEJBQTBCLENBQUM7QUFDM0Q7QUFFTyxTQUFTQyxxQkFBcUJBLENBQUEsRUFBRztFQUN0QyxPQUFPeEQsV0FBVyxDQUFDdkIsVUFBVSxDQUFDZ0YsZ0JBQWdCLENBQUM7QUFDakQ7QUFDTyxTQUFTQyw4QkFBOEJBLENBQUEsRUFBRztFQUMvQyxPQUFPMUQsV0FBVyxDQUFDLENBQUM7QUFDdEI7QUFFTyxTQUFTMkQsd0JBQXdCQSxDQUFBLEVBQUc7RUFDekMsT0FBTzNELFdBQVcsQ0FBQ3ZCLFVBQVUsQ0FBQ21GLG1CQUFtQixDQUFDO0FBQ3BEIn0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcnlwdG8iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdGhyb3VnaCIsIl9oZWxwZXIiLCJ4bWxQYXJzZXJzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImdldENvbmNhdGVyIiwicGFyc2VyIiwiZW1pdEVycm9yIiwib2JqZWN0TW9kZSIsImJ1ZnMiLCJpc0Z1bmN0aW9uIiwiVHlwZUVycm9yIiwiVGhyb3VnaDIiLCJjaHVuayIsImVuYyIsImNiIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwiZ2V0SGFzaFN1bW1lciIsImVuYWJsZVNIQTI1NiIsIm1kNSIsImNyZWF0ZUhhc2giLCJzaGEyNTYiLCJ1cGRhdGUiLCJtZDVzdW0iLCJzaGEyNTZzdW0iLCJkaWdlc3QiLCJoYXNoRGF0YSIsImdldENvcHlPYmplY3RUcmFuc2Zvcm1lciIsInBhcnNlQ29weU9iamVjdCIsImdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIiLCJwYXJzZUxpc3RPYmplY3RzIiwiZ2V0TGlzdE9iamVjdHNWMlRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyIiwiZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyIiwicGFyc2VMaXN0T2JqZWN0c1YyV2l0aE1ldGFkYXRhIiwiZ2V0QnVja2V0Tm90aWZpY2F0aW9uVHJhbnNmb3JtZXIiLCJwYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbiIsIm9iamVjdFJldGVudGlvblRyYW5zZm9ybWVyIiwicGFyc2VPYmplY3RSZXRlbnRpb25Db25maWciLCJvYmplY3RMZWdhbEhvbGRUcmFuc2Zvcm1lciIsInBhcnNlT2JqZWN0TGVnYWxIb2xkQ29uZmlnIiwidXBsb2FkUGFydFRyYW5zZm9ybWVyIiwidXBsb2FkUGFydFBhcnNlciIsInJlbW92ZU9iamVjdHNUcmFuc2Zvcm1lciIsInJlbW92ZU9iamVjdHNQYXJzZXIiXSwic291cmNlcyI6WyJ0cmFuc2Zvcm1lcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIE1pbklPIEphdmFzY3JpcHQgTGlicmFyeSBmb3IgQW1hem9uIFMzIENvbXBhdGlibGUgQ2xvdWQgU3RvcmFnZSwgKEMpIDIwMTUsIDIwMTYgTWluSU8sIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgQ3J5cHRvIGZyb20gJ25vZGU6Y3J5cHRvJ1xuXG5pbXBvcnQgVGhyb3VnaDIgZnJvbSAndGhyb3VnaDInXG5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCAqIGFzIHhtbFBhcnNlcnMgZnJvbSAnLi94bWwtcGFyc2Vycy5qcydcblxuLy8gZ2V0Q29uY2F0ZXIgcmV0dXJucyBhIHN0cmVhbSB0aGF0IGNvbmNhdGVuYXRlcyB0aGUgaW5wdXQgYW5kIGVtaXRzXG4vLyB0aGUgY29uY2F0ZW5hdGVkIG91dHB1dCB3aGVuICdlbmQnIGhhcyByZWFjaGVkLiBJZiBhbiBvcHRpb25hbFxuLy8gcGFyc2VyIGZ1bmN0aW9uIGlzIHBhc3NlZCB1cG9uIHJlYWNoaW5nIHRoZSAnZW5kJyBvZiB0aGUgc3RyZWFtLFxuLy8gYHBhcnNlcihjb25jYXRlbmF0ZWRfZGF0YSlgIHdpbGwgYmUgZW1pdHRlZC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25jYXRlcihwYXJzZXIsIGVtaXRFcnJvcikge1xuICB2YXIgb2JqZWN0TW9kZSA9IGZhbHNlXG4gIHZhciBidWZzID0gW11cblxuICBpZiAocGFyc2VyICYmICFpc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgc2hvdWxkIGJlIG9mIHR5cGUgXCJmdW5jdGlvblwiJylcbiAgfVxuXG4gIGlmIChwYXJzZXIpIHtcbiAgICBvYmplY3RNb2RlID0gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIFRocm91Z2gyKFxuICAgIHsgb2JqZWN0TW9kZSB9LFxuICAgIGZ1bmN0aW9uIChjaHVuaywgZW5jLCBjYikge1xuICAgICAgYnVmcy5wdXNoKGNodW5rKVxuICAgICAgY2IoKVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGNiKSB7XG4gICAgICBpZiAoZW1pdEVycm9yKSB7XG4gICAgICAgIGNiKHBhcnNlcihCdWZmZXIuY29uY2F0KGJ1ZnMpLnRvU3RyaW5nKCkpKVxuICAgICAgICAvLyBjYihlKSB3b3VsZCBtZWFuIHdlIGhhdmUgdG8gZW1pdCAnZW5kJyBieSBleHBsaWNpdGx5IGNhbGxpbmcgdGhpcy5wdXNoKG51bGwpXG4gICAgICAgIHRoaXMucHVzaChudWxsKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChidWZzLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHBhcnNlcihCdWZmZXIuY29uY2F0KGJ1ZnMpLnRvU3RyaW5nKCkpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHVzaChCdWZmZXIuY29uY2F0KGJ1ZnMpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYigpXG4gICAgfSxcbiAgKVxufVxuXG4vLyBBIHRocm91Z2ggc3RyZWFtIHRoYXQgY2FsY3VsYXRlcyBtZDVzdW0gYW5kIHNoYTI1NnN1bVxuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2hTdW1tZXIoZW5hYmxlU0hBMjU2KSB7XG4gIHZhciBtZDUgPSBDcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JylcbiAgdmFyIHNoYTI1NiA9IENyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKVxuXG4gIHJldHVybiBUaHJvdWdoMi5vYmooXG4gICAgZnVuY3Rpb24gKGNodW5rLCBlbmMsIGNiKSB7XG4gICAgICBpZiAoZW5hYmxlU0hBMjU2KSB7XG4gICAgICAgIHNoYTI1Ni51cGRhdGUoY2h1bmspXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZDUudXBkYXRlKGNodW5rKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGNiKSB7XG4gICAgICB2YXIgbWQ1c3VtID0gJydcbiAgICAgIHZhciBzaGEyNTZzdW0gPSAnJ1xuICAgICAgaWYgKGVuYWJsZVNIQTI1Nikge1xuICAgICAgICBzaGEyNTZzdW0gPSBzaGEyNTYuZGlnZXN0KCdoZXgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWQ1c3VtID0gbWQ1LmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHZhciBoYXNoRGF0YSA9IHsgbWQ1c3VtLCBzaGEyNTZzdW0gfVxuICAgICAgdGhpcy5wdXNoKGhhc2hEYXRhKVxuICAgICAgdGhpcy5wdXNoKG51bGwpXG4gICAgICBjYigpXG4gICAgfSxcbiAgKVxufVxuXG4vLyBGb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiBhIHN0cmVhbSBvYmplY3QgdGhhdCBwYXJzZXMgWE1MXG4vLyBhbmQgZW1pdHMgc3VpdGFibGUgSmF2YXNjcmlwdCBvYmplY3RzLlxuXG4vLyBQYXJzZXMgQ29weU9iamVjdCByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5T2JqZWN0VHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlQ29weU9iamVjdClcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHJlc3BvbnNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RPYmplY3RzVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHMpXG59XG5cbi8vIFBhcnNlcyBsaXN0T2JqZWN0cyByZXNwb25zZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0T2JqZWN0c1YyVHJhbnNmb3JtZXIoKSB7XG4gIHJldHVybiBnZXRDb25jYXRlcih4bWxQYXJzZXJzLnBhcnNlTGlzdE9iamVjdHNWMilcbn1cblxuLy8gUGFyc2VzIGxpc3RPYmplY3RzIHdpdGggbWV0YWRhdGEgcmVzcG9uc2UuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdE9iamVjdHNWMldpdGhNZXRhZGF0YVRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUxpc3RPYmplY3RzVjJXaXRoTWV0YWRhdGEpXG59XG5cbi8vIFBhcnNlcyBHRVQvU0VUIEJ1Y2tldE5vdGlmaWNhdGlvbiByZXNwb25zZVxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1Y2tldE5vdGlmaWNhdGlvblRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZUJ1Y2tldE5vdGlmaWNhdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFJldGVudGlvblRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZU9iamVjdFJldGVudGlvbkNvbmZpZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdExlZ2FsSG9sZFRyYW5zZm9ybWVyKCkge1xuICByZXR1cm4gZ2V0Q29uY2F0ZXIoeG1sUGFyc2Vycy5wYXJzZU9iamVjdExlZ2FsSG9sZENvbmZpZylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBhcnRUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMudXBsb2FkUGFydFBhcnNlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU9iamVjdHNUcmFuc2Zvcm1lcigpIHtcbiAgcmV0dXJuIGdldENvbmNhdGVyKHhtbFBhcnNlcnMucmVtb3ZlT2JqZWN0c1BhcnNlcilcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFKLHVCQUFBLENBQUFDLE9BQUE7QUFBOEMsU0FBQUkseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FB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
{
"name": "minio",
"version": "7.1.3",
"version": "7.1.4",
"description": "S3 Compatible Cloud Storage client",

@@ -62,2 +62,5 @@ "main": "./dist/main/minio.js",

"prettier --write"
],
"*.md": [
"prettier --write"
]

@@ -86,12 +89,12 @@ },

"browser-or-node": "^2.1.1",
"buffer-crc32": "^0.2.13",
"buffer-crc32": "^1.0.0",
"eventemitter3": "^5.0.1",
"fast-xml-parser": "^4.2.2",
"ipaddr.js": "^2.0.1",
"json-stream": "^1.0.0",
"lodash": "^4.17.21",
"mime-types": "^2.1.35",
"query-string": "^7.1.3",
"stream-json": "^1.8.0",
"through2": "^4.0.2",
"web-encoding": "^1.1.5",
"xml": "^1.0.1",
"xml2js": "^0.5.0"

@@ -107,7 +110,10 @@ },

"@types/async": "^3.2.20",
"@types/block-stream2": "^2.1.2",
"@types/chai": "^4.3.11",
"@types/chai-as-promised": "^7.1.8",
"@types/lodash": "^4.14.194",
"@types/mime-types": "^2.1.1",
"@types/node": "^20.1.0",
"@types/stream-json": "^1.7.5",
"@types/through2": "^2.0.38",
"@types/xml": "^1.0.8",
"@types/xml2js": "^0.4.11",

@@ -120,2 +126,3 @@ "@typescript-eslint/eslint-plugin": "^5.59.2",

"chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"dotenv": "^16.0.3",

@@ -122,0 +129,0 @@ "eslint": "^8.40.0",

@@ -38,5 +38,5 @@ # 适用于Amazon S3兼容云存储的Minio JavaScript Library [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io)

```js
var Minio = require('minio')
import * as Minio from 'minio'
var minioClient = new Minio.Client({
const minioClient = new Minio.Client({
endPoint: 'play.min.io',

@@ -59,7 +59,7 @@ port: 9000,

```js
var Minio = require('minio')
import * as Minio from 'minio'
// Instantiate the minio client with the endpoint
// and access keys as shown below.
var minioClient = new Minio.Client({
const minioClient = new Minio.Client({
endPoint: 'play.min.io',

@@ -73,3 +73,3 @@ port: 9000,

// File that needs to be uploaded.
var file = '/tmp/photos-europe.tar'
const file = '/tmp/photos-europe.tar'

@@ -82,3 +82,3 @@ // Make a bucket called europetrip.

var metaData = {
const metaData = {
'Content-Type': 'application/octet-stream',

@@ -161,3 +161,3 @@ 'X-Amz-Meta-Testing': 1234,

* [list-objects-v2.js](https://github.com/minio/minio-js/blob/master/examples/list-objects-v2.js)
* [bucket-exists.js](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.js)
* [bucket-exists.mjs](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.mjs)
* [make-bucket.js](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)

@@ -169,9 +169,9 @@ * [remove-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket.mjs)

* [fput-object.js](https://github.com/minio/minio-js/blob/master/examples/fput-object.js)
* [fget-object.js](https://github.com/minio/minio-js/blob/master/examples/fget-object.js)
* [fget-object.mjs](https://github.com/minio/minio-js/blob/master/examples/fget-object.mjs)
#### 完整示例 : 操作对象
* [put-object.js](https://github.com/minio/minio-js/blob/master/examples/put-object.js)
* [get-object.js](https://github.com/minio/minio-js/blob/master/examples/get-object.js)
* [get-object.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object.mjs)
* [copy-object.js](https://github.com/minio/minio-js/blob/master/examples/copy-object.js)
* [get-partialobject.js](https://github.com/minio/minio-js/blob/master/examples/get-partialobject.js)
* [get-partialobject.mjs](https://github.com/minio/minio-js/blob/master/examples/get-partialobject.mjs)
* [remove-object.js](https://github.com/minio/minio-js/blob/master/examples/remove-object.js)

@@ -194,3 +194,3 @@ * [remove-incomplete-upload.js](https://github.com/minio/minio-js/blob/master/examples/remove-incomplete-upload.js)

* [get-bucket-policy.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-policy.js)
* [set-bucket-policy.js](https://github.com/minio/minio-js/blob/master/examples/set-bucket-policy.js)
* [set-bucket-policy.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-policy.mjs)

@@ -197,0 +197,0 @@ ## 了解更多

@@ -5,7 +5,8 @@ # MinIO JavaScript Library for Amazon S3 Compatible Cloud Storage [![Slack](https://slack.min.io/slack?type=svg)](https://slack.min.io)

The MinIO JavaScript Client SDK provides simple APIs to access any Amazon S3 compatible object storage server.
The MinIO JavaScript Client SDK provides high level APIs to access any Amazon S3 compatible object storage server.
This quickstart guide will show you how to install the client SDK and execute an example JavaScript program. For a complete list of APIs and examples, please take a look at the [JavaScript Client API Reference](https://min.io/docs/minio/linux/developers/javascript/API.html) documentation.
This guide will show you how to install the client SDK and execute an example JavaScript program.
For a complete list of APIs and examples, please take a look at the [JavaScript Client API Reference](https://min.io/docs/minio/linux/developers/javascript/API.html) documentation.
This document assumes that you have a working [nodejs](http://nodejs.org/) setup in place.
This document presumes you have a working [Node.js](http://nodejs.org/) development environment, LTS versions v16, v18 or v20.

@@ -24,2 +25,3 @@ ## Download from NPM

npm install
npm run build
npm install -g

@@ -34,16 +36,16 @@ ```

You need five items in order to connect to MinIO object storage server.
The following parameters are needed to connect to a MinIO object storage server:
| Params | Description |
| :-------- | :-------------------------------------------------------------------------------------------------- |
| endPoint | URL to object storage service. |
| port | TCP/IP port number. This input is optional. Default value set to `80` for HTTP and `443` for HTTPs. |
| accessKey | Access key is like user ID that uniquely identifies your account. |
| secretKey | Secret key is the password to your account. |
| useSSL | Set this value to 'true' to enable secure (HTTPS) access |
| Parameter | Description |
| :---------- | :--------------------------------------------------------------------------- |
| `endPoint` | Hostname of the object storage service. |
| `port` | TCP/IP port number. Optional, defaults to `80` for HTTP and `443` for HTTPs. |
| `accessKey` | Access key (user ID) of an account in the S3 service. |
| `secretKey` | Secret key (password) of an account in the S3 service. |
| `useSSL` | Optional, set to 'true' to enable secure (HTTPS) access. |
```js
var Minio = require('minio')
import * as Minio from 'minio'
var minioClient = new Minio.Client({
const minioClient = new Minio.Client({
endPoint: 'play.min.io',

@@ -59,14 +61,18 @@ port: 9000,

This example program connects to an object storage server, makes a bucket on the server and then uploads a file to the bucket.
This example connects to an object storage server, creates a bucket, and uploads a file to the bucket.
It uses the MinIO `play` server, a public MinIO cluster located at [https://play.min.io](https://play.min.io).
We will use the MinIO server running at [https://play.min.io](https://play.min.io) in this example. Feel free to use this service for testing and development. Access credentials shown in this example are open to the public.
The `play` server runs the latest stable version of MinIO and may be used for testing and development.
The access credentials shown in this example are open to the public.
All data uploaded to `play` should be considered public and non-protected.
#### file-uploader.js
#### file-uploader.mjs
```js
var Minio = require('minio')
import * as Minio from 'minio'
// Instantiate the minio client with the endpoint
// and access keys as shown below.
var minioClient = new Minio.Client({
// Instantiate the MinIO client with the object store service
// endpoint and an authorized user's credentials
// play.min.io is the MinIO public test cluster
const minioClient = new Minio.Client({
endPoint: 'play.min.io',

@@ -79,41 +85,57 @@ port: 9000,

// File that needs to be uploaded.
var file = '/tmp/photos-europe.tar'
// File to upload
const sourceFile = '/tmp/test-file.txt'
// Make a bucket called europetrip.
minioClient.makeBucket('europetrip', 'us-east-1', function (err) {
if (err) return console.log(err)
// Destination bucket
const bucket = 'js-test-bucket'
console.log('Bucket created successfully in "us-east-1".')
// Destination object name
const destinationObject = 'my-test-file.txt'
var metaData = {
'Content-Type': 'application/octet-stream',
'X-Amz-Meta-Testing': 1234,
example: 5678,
}
// Using fPutObject API upload your file to the bucket europetrip.
minioClient.fPutObject('europetrip', 'photos-europe.tar', file, metaData, function (err, etag) {
if (err) return console.log(err)
console.log('File uploaded successfully.')
})
})
// Check if the bucket exists
// If it doesn't, create it
const exists = await minioClient.bucketExists(bucket)
if (exists) {
console.log('Bucket ' + bucket + ' exists.')
} else {
await minioClient.makeBucket(bucket, 'us-east-1')
console.log('Bucket ' + bucket + ' created in "us-east-1".')
}
// Set the object metadata
var metaData = {
'Content-Type': 'text/plain',
'X-Amz-Meta-Testing': 1234,
example: 5678,
}
// Upload the file with fPutObject
// If an object with the same name exists,
// it is updated with new data
await minioClient.fPutObject(bucket, destinationObject, sourceFile, metaData)
console.log('File ' + sourceFile + ' uploaded as object ' + destinationObject + ' in bucket ' + bucket)
```
#### Run file-uploader
#### Run the File Uploader
```sh
node file-uploader.js
Bucket created successfully in "us-east-1".
node file-uploader.mjs
Bucket js-test-bucket created successfully in "us-east-1".
File /tmp/test-file.txt uploaded successfully as my-test-file.txt to bucket js-test-bucket
```
mc ls play/europetrip/
[2016-05-25 23:49:50 PDT] 17MiB photos-europe.tar
Verify the object was created with [`mc`](https://min.io/docs/minio/linux/reference/minio-mc.html):
```
mc ls play/js-test-bucket
[2023-11-10 17:52:20 UTC] 20KiB STANDARD my-test-file.txt
```
## API Reference
The full API Reference is available here.
The complete API Reference is available here:
- [Complete API Reference](https://min.io/docs/minio/linux/developers/javascript/API.html)
- [MinIO JavaScript API Reference](https://min.io/docs/minio/linux/developers/javascript/API.html)
### API Reference : Bucket Operations
### Bucket Operations

@@ -136,3 +158,3 @@ - [`makeBucket`](https://min.io/docs/minio/linux/developers/javascript/API.html#makeBucket)

### API Reference : File Object Operations
### File Object Operations

@@ -142,3 +164,3 @@ - [`fPutObject`](https://min.io/docs/minio/linux/developers/javascript/API.html#fPutObject)

### API Reference : Object Operations
### Object Operations

@@ -154,3 +176,3 @@ - [`getObject`](https://min.io/docs/minio/linux/developers/javascript/API.html#getObject)

### API Reference : Presigned Operations
### Presigned Operations

@@ -161,3 +183,3 @@ - [`presignedGetObject`](https://min.io/docs/minio/linux/developers/javascript/API.html#presignedGetObject)

### API Reference : Bucket Notification Operations
### Bucket Notification Operations

@@ -169,3 +191,3 @@ - [`getBucketNotification`](https://min.io/docs/minio/linux/developers/javascript/API.html#getBucketNotification)

### API Reference : Bucket Policy Operations
### Bucket Policy Operations

@@ -175,5 +197,5 @@ - [`getBucketPolicy`](https://min.io/docs/minio/linux/developers/javascript/API.html#getBucketPolicy)

## Full Examples
## Examples
#### Full Examples : Bucket Operations
#### Bucket Operations

@@ -184,31 +206,37 @@ - [list-buckets.mjs](https://github.com/minio/minio-js/blob/master/examples/list-buckets.mjs)

- [list-objects-v2-with-metadata.js](https://github.com/minio/minio-js/blob/master/examples/list-objects-v2-with-metadata.js) (Extension)
- [bucket-exists.js](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.js)
- [bucket-exists.mjs](https://github.com/minio/minio-js/blob/master/examples/bucket-exists.mjs)
- [make-bucket.js](https://github.com/minio/minio-js/blob/master/examples/make-bucket.js)
- [remove-bucket.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket.mjs)
- [list-incomplete-uploads.js](https://github.com/minio/minio-js/blob/master/examples/list-incomplete-uploads.js)
- [get-bucket-versioning.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-versioning.js)
- [set-bucket-versioning.js](https://github.com/minio/minio-js/blob/master/examples/set-bucket-versioning.js)
- [set-bucket-tagging.js](https://github.com/minio/minio-js/blob/master/examples/set-bucket-tagging.js)
- [get-bucket-tagging.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-tagging.js)
- [remove-bucket-tagging.js](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-tagging.js)
- [set-bucket-lifecycle.js](https://github.com/minio/minio-js/blob/master/examples/set-bucket-lifecycle.js)
- [get-bucket-lifecycle.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-lifecycle.js)
- [remove-bucket-lifecycle.js](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-lifecycle.js)
- [get-object-lock-config.js](https://github.com/minio/minio-js/blob/master/examples/get-object-lock-config.js)
- [set-object-lock-config.js](https://github.com/minio/minio-js/blob/master/examples/set-object-lock-config.js)
- [get-bucket-versioning.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-versioning.js)
- [set-bucket-versioning.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-versioning.js)
- [set-bucket-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-tagging.js)
- [get-bucket-versioning.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-versioning.js)
- [set-bucket-versioning.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-versioning.js)
- [set-bucket-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-tagging.js)
- [get-bucket-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-tagging.mjs)
- [remove-bucket-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-tagging.js)
- [set-bucket-lifecycle.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-lifecycle.mjs)
- [get-bucket-lifecycle.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-lifecycle.mjs)
- [remove-bucket-lifecycle.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-lifecycle.mjs)
- [get-object-lock-config.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object-lock-config.mjs)
- [set-object-lock-config.mjs](https://github.com/minio/minio-js/blob/master/examples/set-object-lock-config.mjs)
- [set-bucket-replication.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-replication.mjs)
- [get-bucket-replication.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-replication.mjs)
- [remove-bucket-replication.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-replication.mjs)
- [set-bucket-encryption.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-encryption.mjs)
- [get-bucket-encryption.mjs](https://github.com/minio/minio-js/blob/master/examples/get-bucket-encryption.mjs)
- [remove-bucket-encryption.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-bucket-encryption.mjs)
#### Full Examples : File Object Operations
#### File Object Operations
- [fput-object.js](https://github.com/minio/minio-js/blob/master/examples/fput-object.js)
- [fget-object.js](https://github.com/minio/minio-js/blob/master/examples/fget-object.js)
- [fget-object.mjs](https://github.com/minio/minio-js/blob/master/examples/fget-object.mjs)
#### Full Examples : Object Operations
#### Object Operations
- [put-object.js](https://github.com/minio/minio-js/blob/master/examples/put-object.js)
- [get-object.js](https://github.com/minio/minio-js/blob/master/examples/get-object.js)
- [get-object.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object.mjs)
- [copy-object.js](https://github.com/minio/minio-js/blob/master/examples/copy-object.js)
- [get-partialobject.js](https://github.com/minio/minio-js/blob/master/examples/get-partialobject.js)
- [get-partialobject.mjs](https://github.com/minio/minio-js/blob/master/examples/get-partialobject.mjs)
- [remove-object.js](https://github.com/minio/minio-js/blob/master/examples/remove-object.js)

@@ -219,11 +247,11 @@ - [remove-incomplete-upload.js](https://github.com/minio/minio-js/blob/master/examples/remove-incomplete-upload.js)

- [put-object-retention.js](https://github.com/minio/minio-js/blob/master/examples/put-object-retention.js)
- [put-object-tagging.js](https://github.com/minio/minio-js/blob/master/examples/put-object-tagging.js)
- [get-object-tagging.js](https://github.com/minio/minio-js/blob/master/examples/get-object-tagging.js)
- [remove-object-tagging.js](https://github.com/minio/minio-js/blob/master/examples/remove-object-tagging.js)
- [set-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/set-object-legalhold.js)
- [get-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/get-object-legal-hold.js)
- [put-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/put-object-tagging.js)
- [get-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/get-object-tagging.mjs)
- [remove-object-tagging.mjs](https://github.com/minio/minio-js/blob/master/examples/remove-object-tagging.js)
- [set-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/set-object-legalhold.mjs)
- [get-object-legal-hold.js](https://github.com/minio/minio-js/blob/master/examples/get-object-legal-hold.mjs)
- [compose-object.js](https://github.com/minio/minio-js/blob/master/examples/compose-object.js)
- [select-object-content.js](https://github.com/minio/minio-js/blob/master/examples/select-object-content.js)
- [select-object-content.js](https://github.com/minio/minio-js/blob/master/examples/select-object-content.mjs)
#### Full Examples : Presigned Operations
#### Presigned Operations

@@ -234,3 +262,3 @@ - [presigned-getobject.js](https://github.com/minio/minio-js/blob/master/examples/presigned-getobject.js)

#### Full Examples: Bucket Notification Operations
#### Bucket Notification Operations

@@ -242,6 +270,6 @@ - [get-bucket-notification.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-notification.js)

#### Full Examples: Bucket Policy Operations
#### Bucket Policy Operations
- [get-bucket-policy.js](https://github.com/minio/minio-js/blob/master/examples/get-bucket-policy.js)
- [set-bucket-policy.js](https://github.com/minio/minio-js/blob/master/examples/set-bucket-policy.js)
- [set-bucket-policy.mjs](https://github.com/minio/minio-js/blob/master/examples/set-bucket-policy.mjs)

@@ -256,8 +284,7 @@ ## Custom Settings

- [MinIO JavaScript Client SDK API Reference](https://min.io/docs/minio/linux/developers/javascript/API.html)
- [Build your own Shopping App Example- Full Application Example ](https://github.com/minio/minio-js-store-app)
## Contribute
[Contributors Guide](https://github.com/minio/minio-js/blob/master/CONTRIBUTING.md)
- [Contributors Guide](https://github.com/minio/minio-js/blob/master/CONTRIBUTING.md)
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/minio/minio-js/nodejs.yml)

@@ -117,4 +117,5 @@ /*

code?: string
region?: string
}
export class IsValidBucketNameError extends ExtendableError {}

@@ -25,2 +25,3 @@ /*

import { fsp, fstat } from './async.ts'
import type { Binary, Encryption, ObjectMetaData, RequestHeaders, ResponseHeader } from './type.ts'

@@ -31,36 +32,18 @@ import { ENCRYPTION_TYPES } from './type.ts'

/**
* All characters in string which are NOT unreserved should be percent encoded.
* Unreserved characters are : ALPHA / DIGIT / "-" / "." / "_" / "~"
* Reference https://tools.ietf.org/html/rfc3986#section-2.2
*/
export function uriEscape(string: string) {
return string.split('').reduce((acc: string, elem: string) => {
const buf = Buffer.from(elem)
if (buf.length === 1) {
// length 1 indicates that elem is not a unicode character.
// Check if it is an unreserved characer.
if (
('A' <= elem && elem <= 'Z') ||
('a' <= elem && elem <= 'z') ||
('0' <= elem && elem <= '9') ||
elem === '_' ||
elem === '.' ||
elem === '~' ||
elem === '-'
) {
// Unreserved characer should not be encoded.
acc = acc + elem
return acc
}
}
// elem needs encoding - i.e elem should be encoded if it's not unreserved
// character or if it's a unicode character.
for (const char of buf) {
acc = acc + '%' + char.toString(16).toUpperCase()
}
return acc
}, '')
export function hashBinary(buf: Buffer, enableSHA256: boolean) {
let sha256sum = ''
if (enableSHA256) {
sha256sum = crypto.createHash('sha256').update(buf).digest('hex')
}
const md5sum = crypto.createHash('md5').update(buf).digest('base64')
return { md5sum, sha256sum }
}
// S3 percent-encodes some extra non-standard characters in a URI . So comply with S3.
const encodeAsHex = (c: string) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`
export function uriEscape(uriStr: string): string {
return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex)
}
export function uriResourceEscape(string: string) {

@@ -130,5 +113,5 @@ return uriEscape(string).replace(/%2F/g, '/')

const alphaNumerics = '`~!@#$%^&*()+={}[]|\\"\';:><?/'
const nonAlphaNumerics = '`~!@#$%^&*()+={}[]|\\"\';:><?/'
// All non alphanumeric characters are invalid.
for (const char of alphaNumerics) {
for (const char of nonAlphaNumerics) {
if (host.includes(char)) {

@@ -592,1 +575,27 @@ return false

}
/**
* get content size of object content to upload
*/
export async function getContentLength(s: stream.Readable | Buffer | string): Promise<number | null> {
// use length property of string | Buffer
if (typeof s === 'string' || Buffer.isBuffer(s)) {
return s.length
}
// property of `fs.ReadStream`
const filePath = (s as unknown as Record<string, unknown>).path as string | undefined
if (filePath && typeof filePath === 'string') {
const stat = await fsp.lstat(filePath)
return stat.size
}
// property of `fs.ReadStream`
const fd = (s as unknown as Record<string, unknown>).fd as number | null | undefined
if (fd && typeof fd === 'number') {
const stat = await fstat(fd)
return stat.size
}
return null
}
import type * as http from 'node:http'
import type { Readable as ReadableStream } from 'node:stream'
export type VersionIdentificator = {
versionId?: string
}
export type Binary = string | Buffer

@@ -23,2 +27,3 @@

export type EnabledOrDisabledStatus = 'Enabled' | 'Disabled'
export enum ENCRYPTION_TYPES {

@@ -137,3 +142,3 @@ /**

export type ReplicationRuleStatus = {
Status: 'Enabled' | 'Disabled'
Status: EnabledOrDisabledStatus
}

@@ -146,2 +151,4 @@

export type Tags = Record<string, string>
export type ReplicationRuleDestination = {

@@ -197,1 +204,185 @@ Bucket: string

export type ResultCallback<T> = (error: Error | null, result: T) => void
export type GetObjectLegalHoldOptions = {
versionId: string
}
/**
* @deprecated keep for backward compatible, use `LEGAL_HOLD_STATUS` instead
*/
export type LegalHoldStatus = LEGAL_HOLD_STATUS
export type PutObjectLegalHoldOptions = {
versionId?: string
status: LEGAL_HOLD_STATUS
}
export interface UploadedObjectInfo {
etag: string
versionId: string | null
}
export interface RetentionOptions {
versionId: string
mode?: RETENTION_MODES
retainUntilDate?: IsoDate
governanceBypass?: boolean
}
export type Retention = RetentionOptions | EmptyObject
export type IsoDate = string
export type EmptyObject = Record<string, never>
export type ObjectLockInfo =
| {
objectLockEnabled: EnabledOrDisabledStatus
mode: RETENTION_MODES
unit: RETENTION_VALIDITY_UNITS
validity: number
}
| EmptyObject
export type ObjectLockConfigParam = {
ObjectLockEnabled?: 'Enabled' | undefined
Rule?:
| {
DefaultRetention:
| {
Mode: RETENTION_MODES
Days: number
Years: number
}
| EmptyObject
}
| EmptyObject
}
export type VersioningEnabled = 'Enabled'
export type VersioningSuspended = 'Suspended'
export type BucketVersioningConfiguration = {
Status: VersioningEnabled | VersioningSuspended
// TODO add ExcludedPrefixes, ExcludeFolders which are part of MinIO's extension, as an enhancement.
}
export type TaggingOpts = {
versionId: string
}
export type PutTaggingParams = {
bucketName: string
objectName?: string
tags: Tags
putOpts?: TaggingOpts
}
export type RemoveTaggingParams = {
bucketName: string
objectName?: string
removeOpts?: TaggingOpts
}
export type InputSerialization = {
CompressionType?: 'NONE' | 'GZIP' | 'BZIP2'
CSV?: {
AllowQuotedRecordDelimiter?: boolean
Comments?: string
FieldDelimiter?: string
FileHeaderInfo?: 'NONE' | 'IGNORE' | 'USE'
QuoteCharacter?: string
QuoteEscapeCharacter?: string
RecordDelimiter?: string
}
JSON?: {
Type: 'DOCUMENT' | 'LINES'
}
Parquet?: EmptyObject
}
export type OutputSerialization = {
CSV?: {
FieldDelimiter?: string
QuoteCharacter?: string
QuoteEscapeCharacter?: string
QuoteFields?: string
RecordDelimiter?: string
}
JSON?: {
RecordDelimiter?: string
}
}
export type SelectProgress = { Enabled: boolean }
export type ScanRange = { Start: number; End: number }
export type SelectOptions = {
expression: string
expressionType?: string
inputSerialization: InputSerialization
outputSerialization: OutputSerialization
requestProgress?: SelectProgress
scanRange?: ScanRange
}
export type Expiration = {
Date: string
Days: number
DeleteMarker: boolean
DeleteAll: boolean
}
export type RuleFilterAnd = {
Prefix: string
Tags: Tag[]
}
export type RuleFilter = {
And?: RuleFilterAnd
Prefix: string
Tag?: Tag[]
}
export type NoncurrentVersionExpiration = {
NoncurrentDays: number
NewerNoncurrentVersions?: number
}
export type NoncurrentVersionTransition = {
StorageClass: string
NoncurrentDays?: number
NewerNoncurrentVersions?: number
}
export type Transition = {
Date?: string
StorageClass: string
Days: number
}
export type AbortIncompleteMultipartUpload = {
DaysAfterInitiation: number
}
export type LifecycleRule = {
AbortIncompleteMultipartUpload?: AbortIncompleteMultipartUpload
ID: string
Prefix?: string
Status?: string
Expiration?: Expiration
RuleFilter?: RuleFilter
NoncurrentVersionExpiration?: NoncurrentVersionExpiration
NoncurrentVersionTransition?: NoncurrentVersionTransition
Transition?: Transition
}
export type LifecycleConfig = {
Rule: LifecycleRule[]
}
export type LifeCycleConfigParam = LifecycleConfig | null | undefined | ''
export type ApplySSEByDefault = {
KmsMasterKeyID?: string
SSEAlgorithm: string
}
export type EncryptionRule = {
ApplyServerSideEncryptionByDefault?: ApplySSEByDefault
}
export type EncryptionConfig = {
Rule: EncryptionRule[]
}
import type * as http from 'node:http'
import type stream from 'node:stream'
import crc32 from 'buffer-crc32'
import { XMLParser } from 'fast-xml-parser'
import * as errors from '../errors.ts'
import { parseXml, sanitizeETag, sanitizeObjectKey, toArray } from './helper.ts'
import { SelectResults } from '../helpers.ts'
import { isObject, parseXml, readableStream, sanitizeETag, sanitizeObjectKey, toArray } from './helper.ts'
import { readAsString } from './response.ts'
import type { BucketItemFromList, BucketItemWithMetadata, ReplicationConfig } from './type.ts'
import type { BucketItemFromList, BucketItemWithMetadata, ObjectLockInfo, ReplicationConfig } from './type.ts'
import { RETENTION_VALIDITY_UNITS } from './type.ts'

@@ -149,3 +153,5 @@ // parse XML response for bucket region

}>
prefixes: { prefix: string }[]
prefixes: {
prefix: string
}[]
isTruncated: boolean

@@ -170,3 +176,7 @@ nextKeyMarker: undefined

let xmlobj = parseXml(xml)
const result: { isTruncated: boolean; marker: number; parts: UploadedPart[] } = {
const result: {
isTruncated: boolean
marker: number
parts: UploadedPart[]
} = {
isTruncated: false,

@@ -246,1 +256,298 @@ parts: [],

}
export function parseObjectLegalHoldConfig(xml: string) {
const xmlObj = parseXml(xml)
return xmlObj.LegalHold
}
export function parseTagging(xml: string) {
const xmlObj = parseXml(xml)
let result = []
if (xmlObj.Tagging && xmlObj.Tagging.TagSet && xmlObj.Tagging.TagSet.Tag) {
const tagResult = xmlObj.Tagging.TagSet.Tag
// if it is a single tag convert into an array so that the return value is always an array.
if (isObject(tagResult)) {
result.push(tagResult)
} else {
result = tagResult
}
}
return result
}
// parse XML response when a multipart upload is completed
export function parseCompleteMultipart(xml: string) {
const xmlobj = parseXml(xml).CompleteMultipartUploadResult
if (xmlobj.Location) {
const location = toArray(xmlobj.Location)[0]
const bucket = toArray(xmlobj.Bucket)[0]
const key = xmlobj.Key
const etag = xmlobj.ETag.replace(/^"/g, '')
.replace(/"$/g, '')
.replace(/^&quot;/g, '')
.replace(/&quot;$/g, '')
.replace(/^&#34;/g, '')
.replace(/&#34;$/g, '')
return { location, bucket, key, etag }
}
// Complete Multipart can return XML Error after a 200 OK response
if (xmlobj.Code && xmlobj.Message) {
const errCode = toArray(xmlobj.Code)[0]
const errMessage = toArray(xmlobj.Message)[0]
return { errCode, errMessage }
}
}
type UploadID = string
export type ListMultipartResult = {
uploads: {
key: string
uploadId: UploadID
initiator: unknown
owner: unknown
storageClass: unknown
initiated: Date
}[]
prefixes: {
prefix: string
}[]
isTruncated: boolean
nextKeyMarker: string
nextUploadIdMarker: string
}
// parse XML response for listing in-progress multipart uploads
export function parseListMultipart(xml: string): ListMultipartResult {
const result: ListMultipartResult = {
prefixes: [],
uploads: [],
isTruncated: false,
nextKeyMarker: '',
nextUploadIdMarker: '',
}
let xmlobj = parseXml(xml)
if (!xmlobj.ListMultipartUploadsResult) {
throw new errors.InvalidXMLError('Missing tag: "ListMultipartUploadsResult"')
}
xmlobj = xmlobj.ListMultipartUploadsResult
if (xmlobj.IsTruncated) {
result.isTruncated = xmlobj.IsTruncated
}
if (xmlobj.NextKeyMarker) {
result.nextKeyMarker = xmlobj.NextKeyMarker
}
if (xmlobj.NextUploadIdMarker) {
result.nextUploadIdMarker = xmlobj.nextUploadIdMarker || ''
}
if (xmlobj.CommonPrefixes) {
toArray(xmlobj.CommonPrefixes).forEach((prefix) => {
// @ts-expect-error index check
result.prefixes.push({ prefix: sanitizeObjectKey(toArray<string>(prefix.Prefix)[0]) })
})
}
if (xmlobj.Upload) {
toArray(xmlobj.Upload).forEach((upload) => {
const key = upload.Key
const uploadId = upload.UploadId
const initiator = { id: upload.Initiator.ID, displayName: upload.Initiator.DisplayName }
const owner = { id: upload.Owner.ID, displayName: upload.Owner.DisplayName }
const storageClass = upload.StorageClass
const initiated = new Date(upload.Initiated)
result.uploads.push({ key, uploadId, initiator, owner, storageClass, initiated })
})
}
return result
}
export function parseObjectLockConfig(xml: string): ObjectLockInfo {
const xmlObj = parseXml(xml)
let lockConfigResult = {} as ObjectLockInfo
if (xmlObj.ObjectLockConfiguration) {
lockConfigResult = {
objectLockEnabled: xmlObj.ObjectLockConfiguration.ObjectLockEnabled,
} as ObjectLockInfo
let retentionResp
if (
xmlObj.ObjectLockConfiguration &&
xmlObj.ObjectLockConfiguration.Rule &&
xmlObj.ObjectLockConfiguration.Rule.DefaultRetention
) {
retentionResp = xmlObj.ObjectLockConfiguration.Rule.DefaultRetention || {}
lockConfigResult.mode = retentionResp.Mode
}
if (retentionResp) {
const isUnitYears = retentionResp.Years
if (isUnitYears) {
lockConfigResult.validity = isUnitYears
lockConfigResult.unit = RETENTION_VALIDITY_UNITS.YEARS
} else {
lockConfigResult.validity = retentionResp.Days
lockConfigResult.unit = RETENTION_VALIDITY_UNITS.DAYS
}
}
}
return lockConfigResult
}
export function parseBucketVersioningConfig(xml: string) {
const xmlObj = parseXml(xml)
return xmlObj.VersioningConfiguration
}
// Used only in selectObjectContent API.
// extractHeaderType extracts the first half of the header message, the header type.
function extractHeaderType(stream: stream.Readable): string | undefined {
const headerNameLen = Buffer.from(stream.read(1)).readUInt8()
const headerNameWithSeparator = Buffer.from(stream.read(headerNameLen)).toString()
const splitBySeparator = (headerNameWithSeparator || '').split(':')
return splitBySeparator.length >= 1 ? splitBySeparator[1] : ''
}
function extractHeaderValue(stream: stream.Readable) {
const bodyLen = Buffer.from(stream.read(2)).readUInt16BE()
return Buffer.from(stream.read(bodyLen)).toString()
}
export function parseSelectObjectContentResponse(res: Buffer) {
const selectResults = new SelectResults({}) // will be returned
const responseStream = readableStream(res) // convert byte array to a readable responseStream
// @ts-ignore
while (responseStream._readableState.length) {
// Top level responseStream read tracker.
let msgCrcAccumulator // accumulate from start of the message till the message crc start.
const totalByteLengthBuffer = Buffer.from(responseStream.read(4))
msgCrcAccumulator = crc32(totalByteLengthBuffer)
const headerBytesBuffer = Buffer.from(responseStream.read(4))
msgCrcAccumulator = crc32(headerBytesBuffer, msgCrcAccumulator)
const calculatedPreludeCrc = msgCrcAccumulator.readInt32BE() // use it to check if any CRC mismatch in header itself.
const preludeCrcBuffer = Buffer.from(responseStream.read(4)) // read 4 bytes i.e 4+4 =8 + 4 = 12 ( prelude + prelude crc)
msgCrcAccumulator = crc32(preludeCrcBuffer, msgCrcAccumulator)
const totalMsgLength = totalByteLengthBuffer.readInt32BE()
const headerLength = headerBytesBuffer.readInt32BE()
const preludeCrcByteValue = preludeCrcBuffer.readInt32BE()
if (preludeCrcByteValue !== calculatedPreludeCrc) {
// Handle Header CRC mismatch Error
throw new Error(
`Header Checksum Mismatch, Prelude CRC of ${preludeCrcByteValue} does not equal expected CRC of ${calculatedPreludeCrc}`,
)
}
const headers: Record<string, unknown> = {}
if (headerLength > 0) {
const headerBytes = Buffer.from(responseStream.read(headerLength))
msgCrcAccumulator = crc32(headerBytes, msgCrcAccumulator)
const headerReaderStream = readableStream(headerBytes)
// @ts-ignore
while (headerReaderStream._readableState.length) {
const headerTypeName = extractHeaderType(headerReaderStream)
headerReaderStream.read(1) // just read and ignore it.
if (headerTypeName) {
headers[headerTypeName] = extractHeaderValue(headerReaderStream)
}
}
}
let payloadStream
const payLoadLength = totalMsgLength - headerLength - 16
if (payLoadLength > 0) {
const payLoadBuffer = Buffer.from(responseStream.read(payLoadLength))
msgCrcAccumulator = crc32(payLoadBuffer, msgCrcAccumulator)
// read the checksum early and detect any mismatch so we can avoid unnecessary further processing.
const messageCrcByteValue = Buffer.from(responseStream.read(4)).readInt32BE()
const calculatedCrc = msgCrcAccumulator.readInt32BE()
// Handle message CRC Error
if (messageCrcByteValue !== calculatedCrc) {
throw new Error(
`Message Checksum Mismatch, Message CRC of ${messageCrcByteValue} does not equal expected CRC of ${calculatedCrc}`,
)
}
payloadStream = readableStream(payLoadBuffer)
}
const messageType = headers['message-type']
switch (messageType) {
case 'error': {
const errorMessage = headers['error-code'] + ':"' + headers['error-message'] + '"'
throw new Error(errorMessage)
}
case 'event': {
const contentType = headers['content-type']
const eventType = headers['event-type']
switch (eventType) {
case 'End': {
selectResults.setResponse(res)
return selectResults
}
case 'Records': {
const readData = payloadStream?.read(payLoadLength)
selectResults.setRecords(readData)
break
}
case 'Progress':
{
switch (contentType) {
case 'text/xml': {
const progressData = payloadStream?.read(payLoadLength)
selectResults.setProgress(progressData.toString())
break
}
default: {
const errorMessage = `Unexpected content-type ${contentType} sent for event-type Progress`
throw new Error(errorMessage)
}
}
}
break
case 'Stats':
{
switch (contentType) {
case 'text/xml': {
const statsData = payloadStream?.read(payLoadLength)
selectResults.setStats(statsData.toString())
break
}
default: {
const errorMessage = `Unexpected content-type ${contentType} sent for event-type Stats`
throw new Error(errorMessage)
}
}
}
break
default: {
// Continuation message: Not sure if it is supported. did not find a reference or any message in response.
// It does not have a payload.
const warningMessage = `Un implemented event detected ${messageType}.`
// eslint-disable-next-line no-console
console.warn(warningMessage)
}
}
}
}
}
}
export function parseLifecycleConfig(xml: string) {
const xmlObj = parseXml(xml)
return xmlObj.LifecycleConfiguration
}
export function parseBucketEncryptionConfig(xml: string) {
return parseXml(xml)
}
// imported from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/93cfb0ec069731dcdfc31464788613f7cddb8192/types/minio/index.d.ts
/* eslint-disable @typescript-eslint/no-explicit-any */
import { EventEmitter } from 'node:events'
import type { Readable as ReadableStream } from 'node:stream'
import type {

@@ -18,3 +15,2 @@ CopyDestinationOptions,

import { PostPolicy } from './internal/post-policy.ts'
import type { Region } from './internal/s3-endpoints.ts'
import type {

@@ -27,7 +23,17 @@ BucketItem,

BucketStream,
EmptyObject,
ExistingObjectReplication,
GetObjectLegalHoldOptions,
IncompleteUploadedBucketItem,
InputSerialization,
IsoDate,
ItemBucketMetadata,
ItemBucketMetadataList,
LegalHoldStatus,
LifecycleConfig,
LifecycleRule,
MetadataItem,
ObjectLockInfo,
OutputSerialization,
PutObjectLegalHoldOptions,
ReplicaModifications,

@@ -42,9 +48,20 @@ ReplicationConfig,

ResultCallback,
Retention,
RetentionOptions,
ScanRange,
SelectOptions,
SelectProgress,
SourceSelectionCriteria,
Tag,
VersionIdentificator,
} from './internal/type.ts'
import type { NotificationConfig, NotificationEvent, NotificationPoller } from './notification.ts'
export * from './errors.ts'
export * from './helpers.ts'
export type { Region } from './internal/s3-endpoints.ts'
export type * from './notification.ts'
export * from './notification.ts'
export { CopyConditions, PostPolicy }
export type { MakeBucketOpt } from './internal/client.ts'
export type {

@@ -58,8 +75,18 @@ BucketItem,

ClientOptions,
EmptyObject,
ExistingObjectReplication,
GetObjectLegalHoldOptions,
IncompleteUploadedBucketItem,
InputSerialization,
IsoDate,
ItemBucketMetadata,
ItemBucketMetadataList,
LegalHoldStatus,
LifecycleConfig,
LifecycleRule,
MetadataItem,
NoResultCallback,
ObjectLockInfo,
OutputSerialization,
PutObjectLegalHoldOptions,
RemoveOptions,

@@ -74,2 +101,7 @@ ReplicaModifications,

ReplicationRuleStatus,
Retention,
RetentionOptions,
ScanRange,
SelectOptions,
SelectProgress,
SourceSelectionCriteria,

@@ -79,22 +111,2 @@ Tag,

// Exports only from typings
export type NotificationEvent =
| 's3:ObjectCreated:*'
| 's3:ObjectCreated:Put'
| 's3:ObjectCreated:Post'
| 's3:ObjectCreated:Copy'
| 's3:ObjectCreated:CompleteMultipartUpload'
| 's3:ObjectRemoved:*'
| 's3:ObjectRemoved:Delete'
| 's3:ObjectRemoved:DeleteMarkerCreated'
| 's3:ReducedRedundancyLostObject'
| 's3:TestEvent'
| 's3:ObjectRestore:Post'
| 's3:ObjectRestore:Completed'
| 's3:Replication:OperationFailedReplication'
| 's3:Replication:OperationMissedThreshold'
| 's3:Replication:OperationReplicatedAfterThreshold'
| 's3:Replication:OperationNotTracked'
| string
/**

@@ -110,15 +122,4 @@ * @deprecated keep for backward compatible, use `RETENTION_MODES` instead

/**
* @deprecated keep for backward compatible
*/
export type LegalHoldStatus = LEGAL_HOLD_STATUS
export type VersioningConfig = Record<string | number | symbol, unknown>
export type TagList = Record<string, string>
export type EmptyObject = Record<string, never>
export type VersionIdentificator = Pick<RetentionOptions, 'versionId'>
export type Lifecycle = LifecycleConfig | null | ''
export type Lock = LockConfig | EmptyObject
export type Encryption = EncryptionConfig | EmptyObject
export type Retention = RetentionOptions | EmptyObject
export type IsoDate = string

@@ -132,15 +133,2 @@ export interface PostPolicyResult {

export interface UploadedObjectInfo {
etag: string
versionId: string | null
}
export interface LifecycleConfig {
Rule: LifecycleRule[]
}
export interface LifecycleRule {
[key: string]: any
}
export interface LockConfig {

@@ -152,17 +140,2 @@ mode: RETENTION_MODES

export interface EncryptionConfig {
Rule: EncryptionRule[]
}
export interface EncryptionRule {
[key: string]: any
}
export interface RetentionOptions {
versionId: string
mode?: RETENTION_MODES
retainUntilDate?: IsoDate
governanceBypass?: boolean
}
export interface LegalHoldOptions {

@@ -173,41 +146,2 @@ versionId: string

export interface InputSerialization {
CompressionType?: 'NONE' | 'GZIP' | 'BZIP2'
CSV?: {
AllowQuotedRecordDelimiter?: boolean
Comments?: string
FieldDelimiter?: string
FileHeaderInfo?: 'NONE' | 'IGNORE' | 'USE'
QuoteCharacter?: string
QuoteEscapeCharacter?: string
RecordDelimiter?: string
}
JSON?: {
Type: 'DOCUMENT' | 'LINES'
}
Parquet?: EmptyObject
}
export interface OutputSerialization {
CSV?: {
FieldDelimiter?: string
QuoteCharacter?: string
QuoteEscapeCharacter?: string
QuoteFields?: string
RecordDelimiter?: string
}
JSON?: {
RecordDelimiter?: string
}
}
export interface SelectOptions {
expression: string
expressionType?: string
inputSerialization: InputSerialization
outputSerialization: OutputSerialization
requestProgress?: { Enabled: boolean }
scanRange?: { Start: number; End: number }
}
export interface SourceObjectStats {

@@ -221,28 +155,4 @@ size: number

// No need to export this. But without it - linter error.
export class TargetConfig {
setId(id: unknown): void
addEvent(newEvent: unknown): void
addFilterSuffix(suffix: string): void
addFilterPrefix(prefix: string): void
}
export interface MakeBucketOpt {
ObjectLocking: boolean
}
// Exports from library
export class Client extends TypedClient {
// Bucket operations
makeBucket(bucketName: string, region: Region, makeOpts: MakeBucketOpt, callback: NoResultCallback): void
makeBucket(bucketName: string, region: Region, callback: NoResultCallback): void
makeBucket(bucketName: string, callback: NoResultCallback): void
makeBucket(bucketName: string, region?: Region, makeOpts?: MakeBucketOpt): Promise<void>
bucketExists(bucketName: string, callback: ResultCallback<boolean>): void
bucketExists(bucketName: string): Promise<boolean>
listObjects(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<BucketItem>

@@ -252,119 +162,2 @@

listIncompleteUploads(
bucketName: string,
prefix?: string,
recursive?: boolean,
): BucketStream<IncompleteUploadedBucketItem>
getBucketVersioning(bucketName: string, callback: ResultCallback<VersioningConfig>): void
getBucketVersioning(bucketName: string): Promise<VersioningConfig>
setBucketVersioning(bucketName: string, versioningConfig: any, callback: NoResultCallback): void
setBucketVersioning(bucketName: string, versioningConfig: any): Promise<void>
getBucketTagging(bucketName: string, callback: ResultCallback<Tag[]>): void
getBucketTagging(bucketName: string): Promise<Tag[]>
setBucketTagging(bucketName: string, tags: TagList, callback: NoResultCallback): void
setBucketTagging(bucketName: string, tags: TagList): Promise<void>
removeBucketTagging(bucketName: string, callback: NoResultCallback): void
removeBucketTagging(bucketName: string): Promise<void>
setBucketLifecycle(bucketName: string, lifecycleConfig: Lifecycle, callback: NoResultCallback): void
setBucketLifecycle(bucketName: string, lifecycleConfig: Lifecycle): Promise<void>
getBucketLifecycle(bucketName: string, callback: ResultCallback<Lifecycle>): void
getBucketLifecycle(bucketName: string): Promise<Lifecycle>
removeBucketLifecycle(bucketName: string, callback: NoResultCallback): void
removeBucketLifecycle(bucketName: string): Promise<void>
setObjectLockConfig(bucketName: string, callback: NoResultCallback): void
setObjectLockConfig(bucketName: string, lockConfig: Lock, callback: NoResultCallback): void
setObjectLockConfig(bucketName: string, lockConfig?: Lock): Promise<void>
getObjectLockConfig(bucketName: string, callback: ResultCallback<Lock>): void
getObjectLockConfig(bucketName: string): Promise<Lock>
getBucketEncryption(bucketName: string, callback: ResultCallback<Encryption>): void
getBucketEncryption(bucketName: string): Promise<Encryption>
setBucketEncryption(bucketName: string, encryptionConfig: Encryption, callback: NoResultCallback): void
setBucketEncryption(bucketName: string, encryptionConfig: Encryption): Promise<void>
removeBucketEncryption(bucketName: string, callback: NoResultCallback): void
removeBucketEncryption(bucketName: string): Promise<void>
// Object operations
getObject(bucketName: string, objectName: string, callback: ResultCallback<ReadableStream>): void
getObject(bucketName: string, objectName: string): Promise<ReadableStream>
getPartialObject(
bucketName: string,
objectName: string,
offset: number,
callback: ResultCallback<ReadableStream>,
): void
getPartialObject(
bucketName: string,
objectName: string,
offset: number,
length: number,
callback: ResultCallback<ReadableStream>,
): void
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number): Promise<ReadableStream>
fGetObject(bucketName: string, objectName: string, filePath: string, callback: NoResultCallback): void
fGetObject(bucketName: string, objectName: string, filePath: string): Promise<void>
putObject(
bucketName: string,
objectName: string,
stream: ReadableStream | Buffer | string,
callback: ResultCallback<UploadedObjectInfo>,
): void
putObject(
bucketName: string,
objectName: string,
stream: ReadableStream | Buffer | string,
size: number,
callback: ResultCallback<UploadedObjectInfo>,
): void
putObject(
bucketName: string,
objectName: string,
stream: ReadableStream | Buffer | string,
size: number,
metaData: ItemBucketMetadata,
callback: ResultCallback<UploadedObjectInfo>,
): void
putObject(
bucketName: string,
objectName: string,
stream: ReadableStream | Buffer | string,
size?: number,
metaData?: ItemBucketMetadata,
): Promise<UploadedObjectInfo>
putObject(
bucketName: string,
objectName: string,
stream: ReadableStream | Buffer | string,
metaData?: ItemBucketMetadata,
): Promise<UploadedObjectInfo>
fPutObject(
bucketName: string,
objectName: string,
filePath: string,
metaData: ItemBucketMetadata,
callback: ResultCallback<UploadedObjectInfo>,
): void
fPutObject(
bucketName: string,
objectName: string,
filePath: string,
metaData?: ItemBucketMetadata,
): Promise<UploadedObjectInfo>
copyObject(

@@ -390,11 +183,2 @@ bucketName: string,

putObjectRetention(bucketName: string, objectName: string, callback: NoResultCallback): void
putObjectRetention(
bucketName: string,
objectName: string,
retentionOptions: Retention,
callback: NoResultCallback,
): void
putObjectRetention(bucketName: string, objectName: string, retentionOptions?: Retention): Promise<void>
getObjectRetention(

@@ -408,57 +192,2 @@ bucketName: string,

setObjectTagging(bucketName: string, objectName: string, tags: TagList, callback: NoResultCallback): void
setObjectTagging(
bucketName: string,
objectName: string,
tags: TagList,
putOptions: VersionIdentificator,
callback: NoResultCallback,
): void
setObjectTagging(
bucketName: string,
objectName: string,
tags: TagList,
putOptions?: VersionIdentificator,
): Promise<void>
removeObjectTagging(bucketName: string, objectName: string, callback: NoResultCallback): void
removeObjectTagging(
bucketName: string,
objectName: string,
removeOptions: VersionIdentificator,
callback: NoResultCallback,
): void
removeObjectTagging(bucketName: string, objectName: string, removeOptions?: VersionIdentificator): Promise<void>
getObjectTagging(bucketName: string, objectName: string, callback: ResultCallback<Tag[]>): void
getObjectTagging(
bucketName: string,
objectName: string,
getOptions: VersionIdentificator,
callback: ResultCallback<Tag[]>,
): void
getObjectTagging(bucketName: string, objectName: string, getOptions?: VersionIdentificator): Promise<Tag[]>
getObjectLegalHold(bucketName: string, objectName: string, callback: ResultCallback<LegalHoldOptions>): void
getObjectLegalHold(
bucketName: string,
objectName: string,
getOptions: VersionIdentificator,
callback: ResultCallback<LegalHoldOptions>,
): void
getObjectLegalHold(
bucketName: string,
objectName: string,
getOptions?: VersionIdentificator,
): Promise<LegalHoldOptions>
setObjectLegalHold(bucketName: string, objectName: string, callback: NoResultCallback): void
setObjectLegalHold(
bucketName: string,
objectName: string,
setOptions: LegalHoldOptions,
callback: NoResultCallback,
): void
setObjectLegalHold(bucketName: string, objectName: string, setOptions?: LegalHoldOptions): Promise<void>
composeObject(

@@ -471,10 +200,2 @@ destObjConfig: CopyDestinationOptions,

selectObjectContent(
bucketName: string,
objectName: string,
selectOpts: SelectOptions,
callback: NoResultCallback,
): void
selectObjectContent(bucketName: string, objectName: string, selectOpts: SelectOptions): Promise<void>
// Presigned operations

@@ -561,8 +282,2 @@ presignedUrl(httpMethod: string, bucketName: string, objectName: string, callback: ResultCallback<string>): void

getBucketPolicy(bucketName: string, callback: ResultCallback<string>): void
getBucketPolicy(bucketName: string): Promise<string>
setBucketPolicy(bucketName: string, bucketPolicy: string, callback: NoResultCallback): void
setBucketPolicy(bucketName: string, bucketPolicy: string): Promise<void>
listenBucketNotification(

@@ -578,44 +293,1 @@ bucketName: string,

}
export declare class NotificationPoller extends EventEmitter {
stop(): void
start(): void
// must to be public?
checkForChanges(): void
}
export declare class NotificationConfig {
add(target: TopicConfig | QueueConfig | CloudFunctionConfig): void
}
export declare class TopicConfig extends TargetConfig {
constructor(arn: string)
}
export declare class QueueConfig extends TargetConfig {
constructor(arn: string)
}
export declare class CloudFunctionConfig extends TargetConfig {
constructor(arn: string)
}
export declare function buildARN(
partition: string,
service: string,
region: string,
accountId: string,
resource: string,
): string
export declare const ObjectCreatedAll: NotificationEvent // s3:ObjectCreated:*'
export declare const ObjectCreatedPut: NotificationEvent // s3:ObjectCreated:Put
export declare const ObjectCreatedPost: NotificationEvent // s3:ObjectCreated:Post
export declare const ObjectCreatedCopy: NotificationEvent // s3:ObjectCreated:Copy
export declare const ObjectCreatedCompleteMultipartUpload: NotificationEvent // s3:ObjectCreated:CompleteMultipartUpload
export declare const ObjectRemovedAll: NotificationEvent // s3:ObjectRemoved:*
export declare const ObjectRemovedDelete: NotificationEvent // s3:ObjectRemoved:Delete
export declare const ObjectRemovedDeleteMarkerCreated: NotificationEvent // s3:ObjectRemoved:DeleteMarkerCreated
export declare const ObjectReducedRedundancyLostObject: NotificationEvent // s3:ReducedRedundancyLostObject

@@ -19,3 +19,2 @@ /*

import JSONParser from 'json-stream'
import Through2 from 'through2'

@@ -105,7 +104,2 @@

// Parses listMultipartUploads response.
export function getListMultipartTransformer() {
return getConcater(xmlParsers.parseListMultipart)
}
// Parses listObjects response.

@@ -126,7 +120,2 @@ export function getListObjectsTransformer() {

// Parses completeMultipartUpload response.
export function getCompleteMultipartTransformer() {
return getConcater(xmlParsers.parseCompleteMultipart)
}
// Parses GET/SET BucketNotification response

@@ -137,30 +126,5 @@ export function getBucketNotificationTransformer() {

// Parses a notification.
export function getNotificationTransformer() {
// This will parse and return each object.
return new JSONParser()
}
export function bucketVersioningTransformer() {
return getConcater(xmlParsers.parseBucketVersioningConfig)
}
export function getTagsTransformer() {
return getConcater(xmlParsers.parseTagging)
}
export function lifecycleTransformer() {
return getConcater(xmlParsers.parseLifecycleConfig)
}
export function objectLockTransformer() {
return getConcater(xmlParsers.parseObjectLockConfig)
}
export function objectRetentionTransformer() {
return getConcater(xmlParsers.parseObjectRetentionConfig)
}
export function bucketEncryptionTransformer() {
return getConcater(xmlParsers.parseBucketEncryptionConfig)
}

@@ -174,5 +138,2 @@ export function objectLegalHoldTransformer() {

}
export function selectObjectContentTransformer() {
return getConcater()
}

@@ -179,0 +140,0 @@ export function removeObjectsTransformer() {

@@ -17,17 +17,6 @@ /*

import crc32 from 'buffer-crc32'
import { XMLParser } from 'fast-xml-parser'
import * as errors from './errors.ts'
import { SelectResults } from './helpers.ts'
import {
isObject,
parseXml,
readableStream,
sanitizeETag,
sanitizeObjectKey,
sanitizeSize,
toArray,
} from './internal/helper.ts'
import { RETENTION_VALIDITY_UNITS } from './internal/type.ts'
import { isObject, parseXml, sanitizeETag, sanitizeObjectKey, sanitizeSize, toArray } from './internal/helper.ts'

@@ -67,48 +56,2 @@ const fxpWithoutNumParser = new XMLParser({

// parse XML response for listing in-progress multipart uploads
export function parseListMultipart(xml) {
var result = {
uploads: [],
prefixes: [],
isTruncated: false,
}
var xmlobj = parseXml(xml)
if (!xmlobj.ListMultipartUploadsResult) {
throw new errors.InvalidXMLError('Missing tag: "ListMultipartUploadsResult"')
}
xmlobj = xmlobj.ListMultipartUploadsResult
if (xmlobj.IsTruncated) {
result.isTruncated = xmlobj.IsTruncated
}
if (xmlobj.NextKeyMarker) {
result.nextKeyMarker = xmlobj.NextKeyMarker
}
if (xmlobj.NextUploadIdMarker) {
result.nextUploadIdMarker = xmlobj.nextUploadIdMarker || ''
}
if (xmlobj.CommonPrefixes) {
toArray(xmlobj.CommonPrefixes).forEach((prefix) => {
result.prefixes.push({ prefix: sanitizeObjectKey(toArray(prefix.Prefix)[0]) })
})
}
if (xmlobj.Upload) {
toArray(xmlobj.Upload).forEach((upload) => {
var key = upload.Key
var uploadId = upload.UploadId
var initiator = { id: upload.Initiator.ID, displayName: upload.Initiator.DisplayName }
var owner = { id: upload.Owner.ID, displayName: upload.Owner.DisplayName }
var storageClass = upload.StorageClass
var initiated = new Date(upload.Initiated)
result.uploads.push({ key, uploadId, initiator, owner, storageClass, initiated })
})
}
return result
}
// parse XML response to list all the owned buckets
// parse XML response for bucket notification

@@ -187,26 +130,2 @@ export function parseBucketNotification(xml) {

// parse XML response when a multipart upload is completed
export function parseCompleteMultipart(xml) {
var xmlobj = parseXml(xml).CompleteMultipartUploadResult
if (xmlobj.Location) {
var location = toArray(xmlobj.Location)[0]
var bucket = toArray(xmlobj.Bucket)[0]
var key = xmlobj.Key
var etag = xmlobj.ETag.replace(/^"/g, '')
.replace(/"$/g, '')
.replace(/^&quot;/g, '')
.replace(/&quot;$/g, '')
.replace(/^&#34;/g, '')
.replace(/&#34;$/g, '')
return { location, bucket, key, etag }
}
// Complete Multipart can return XML Error after a 200 OK response
if (xmlobj.Code && xmlobj.Message) {
var errCode = toArray(xmlobj.Code)[0]
var errMessage = toArray(xmlobj.Message)[0]
return { errCode, errMessage }
}
}
const formatObjInfo = (content, opts = {}) => {

@@ -272,2 +191,4 @@ let { Key, LastModified, ETag, Size, VersionId, IsLatest } = content

nextMarker = listBucketResult.NextMarker
} else if (isTruncated && result.objects.length > 0) {
nextMarker = result.objects[result.objects.length - 1].name
}

@@ -385,57 +306,2 @@ parseCommonPrefixesEntity(listBucketResult.CommonPrefixes)

export function parseBucketVersioningConfig(xml) {
var xmlObj = parseXml(xml)
return xmlObj.VersioningConfiguration
}
export function parseTagging(xml) {
const xmlObj = parseXml(xml)
let result = []
if (xmlObj.Tagging && xmlObj.Tagging.TagSet && xmlObj.Tagging.TagSet.Tag) {
const tagResult = xmlObj.Tagging.TagSet.Tag
// if it is a single tag convert into an array so that the return value is always an array.
if (isObject(tagResult)) {
result.push(tagResult)
} else {
result = tagResult
}
}
return result
}
export function parseLifecycleConfig(xml) {
const xmlObj = parseXml(xml)
return xmlObj.LifecycleConfiguration
}
export function parseObjectLockConfig(xml) {
const xmlObj = parseXml(xml)
let lockConfigResult = {}
if (xmlObj.ObjectLockConfiguration) {
lockConfigResult = {
objectLockEnabled: xmlObj.ObjectLockConfiguration.ObjectLockEnabled,
}
let retentionResp
if (
xmlObj.ObjectLockConfiguration &&
xmlObj.ObjectLockConfiguration.Rule &&
xmlObj.ObjectLockConfiguration.Rule.DefaultRetention
) {
retentionResp = xmlObj.ObjectLockConfiguration.Rule.DefaultRetention || {}
lockConfigResult.mode = retentionResp.Mode
}
if (retentionResp) {
const isUnitYears = retentionResp.Years
if (isUnitYears) {
lockConfigResult.validity = isUnitYears
lockConfigResult.unit = RETENTION_VALIDITY_UNITS.YEARS
} else {
lockConfigResult.validity = retentionResp.Days
lockConfigResult.unit = RETENTION_VALIDITY_UNITS.DAYS
}
}
return lockConfigResult
}
}
export function parseObjectRetentionConfig(xml) {

@@ -451,7 +317,2 @@ const xmlObj = parseXml(xml)

export function parseBucketEncryptionConfig(xml) {
let encConfig = parseXml(xml)
return encConfig
}
export function parseObjectLegalHoldConfig(xml) {

@@ -476,141 +337,1 @@ const xmlObj = parseXml(xml)

}
export function parseSelectObjectContentResponse(res) {
// extractHeaderType extracts the first half of the header message, the header type.
function extractHeaderType(stream) {
const headerNameLen = Buffer.from(stream.read(1)).readUInt8()
const headerNameWithSeparator = Buffer.from(stream.read(headerNameLen)).toString()
const splitBySeparator = (headerNameWithSeparator || '').split(':')
const headerName = splitBySeparator.length >= 1 ? splitBySeparator[1] : ''
return headerName
}
function extractHeaderValue(stream) {
const bodyLen = Buffer.from(stream.read(2)).readUInt16BE()
const bodyName = Buffer.from(stream.read(bodyLen)).toString()
return bodyName
}
const selectResults = new SelectResults({}) // will be returned
const responseStream = readableStream(res) // convert byte array to a readable responseStream
while (responseStream._readableState.length) {
// Top level responseStream read tracker.
let msgCrcAccumulator // accumulate from start of the message till the message crc start.
const totalByteLengthBuffer = Buffer.from(responseStream.read(4))
msgCrcAccumulator = crc32(totalByteLengthBuffer)
const headerBytesBuffer = Buffer.from(responseStream.read(4))
msgCrcAccumulator = crc32(headerBytesBuffer, msgCrcAccumulator)
const calculatedPreludeCrc = msgCrcAccumulator.readInt32BE() // use it to check if any CRC mismatch in header itself.
const preludeCrcBuffer = Buffer.from(responseStream.read(4)) // read 4 bytes i.e 4+4 =8 + 4 = 12 ( prelude + prelude crc)
msgCrcAccumulator = crc32(preludeCrcBuffer, msgCrcAccumulator)
const totalMsgLength = totalByteLengthBuffer.readInt32BE()
const headerLength = headerBytesBuffer.readInt32BE()
const preludeCrcByteValue = preludeCrcBuffer.readInt32BE()
if (preludeCrcByteValue !== calculatedPreludeCrc) {
// Handle Header CRC mismatch Error
throw new Error(
`Header Checksum Mismatch, Prelude CRC of ${preludeCrcByteValue} does not equal expected CRC of ${calculatedPreludeCrc}`,
)
}
const headers = {}
if (headerLength > 0) {
const headerBytes = Buffer.from(responseStream.read(headerLength))
msgCrcAccumulator = crc32(headerBytes, msgCrcAccumulator)
const headerReaderStream = readableStream(headerBytes)
while (headerReaderStream._readableState.length) {
let headerTypeName = extractHeaderType(headerReaderStream)
headerReaderStream.read(1) // just read and ignore it.
headers[headerTypeName] = extractHeaderValue(headerReaderStream)
}
}
let payloadStream
const payLoadLength = totalMsgLength - headerLength - 16
if (payLoadLength > 0) {
const payLoadBuffer = Buffer.from(responseStream.read(payLoadLength))
msgCrcAccumulator = crc32(payLoadBuffer, msgCrcAccumulator)
// read the checksum early and detect any mismatch so we can avoid unnecessary further processing.
const messageCrcByteValue = Buffer.from(responseStream.read(4)).readInt32BE()
const calculatedCrc = msgCrcAccumulator.readInt32BE()
// Handle message CRC Error
if (messageCrcByteValue !== calculatedCrc) {
throw new Error(
`Message Checksum Mismatch, Message CRC of ${messageCrcByteValue} does not equal expected CRC of ${calculatedCrc}`,
)
}
payloadStream = readableStream(payLoadBuffer)
}
const messageType = headers['message-type']
switch (messageType) {
case 'error': {
const errorMessage = headers['error-code'] + ':"' + headers['error-message'] + '"'
throw new Error(errorMessage)
}
case 'event': {
const contentType = headers['content-type']
const eventType = headers['event-type']
switch (eventType) {
case 'End': {
selectResults.setResponse(res)
return selectResults
}
case 'Records': {
const readData = payloadStream.read(payLoadLength)
selectResults.setRecords(readData)
break
}
case 'Progress':
{
switch (contentType) {
case 'text/xml': {
const progressData = payloadStream.read(payLoadLength)
selectResults.setProgress(progressData.toString())
break
}
default: {
const errorMessage = `Unexpected content-type ${contentType} sent for event-type Progress`
throw new Error(errorMessage)
}
}
}
break
case 'Stats':
{
switch (contentType) {
case 'text/xml': {
const statsData = payloadStream.read(payLoadLength)
selectResults.setStats(statsData.toString())
break
}
default: {
const errorMessage = `Unexpected content-type ${contentType} sent for event-type Stats`
throw new Error(errorMessage)
}
}
}
break
default: {
// Continuation message: Not sure if it is supported. did not find a reference or any message in response.
// It does not have a payload.
const warningMessage = `Un implemented event detected ${messageType}.`
// eslint-disable-next-line no-console
console.warn(warningMessage)
}
} // eventType End
} // Event End
} // messageType End
} // Top Level Stream End
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc