sensifai-sdk-ngx
Version:
This Angular client provides a wrapper around Sensifai Image and Video recognition API.
167 lines • 14.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
var SensifaiSdkNgxService = /** @class */ (function () {
function SensifaiSdkNgxService(httpClient) {
this.httpClient = httpClient;
this.MainHost = 'https://api.sensifai.com/api/';
}
/**
* Retrieve Result By Task ID
* @param TaskID: Your Process Task ID
* @param onSuccess: Success CallBack Function
* @param onError: Error CallBack Function
*/
/**
* Retrieve Result By Task ID
* @param {?} TaskID
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
SensifaiSdkNgxService.prototype.getResultByTaskID = /**
* Retrieve Result By Task ID
* @param {?} TaskID
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
function (TaskID, onSuccess, onError) {
/** @type {?} */
var payload = {
'query': 'query( $taskId: String! ){apiResult( taskId: $taskId){ ...on ImageResult{isDone errors imageResults{nsfwResult{type probability value}logoResult{description}landmarkResult{description}taggingResult{label probability}faceResult{detectedBoxesPercentage probability detectedFace label}}} ... on VideoResult{fps duration isDone framesCount errors videoResults{startSecond endSecond startFrame endFrame thumbnailPath taggingResult{label probability}actionResult{label probability}celebrityResult{name frequency} sportResult{label probability}nsfwResult{probability type value}}}}}',
'variables': { 'taskId': TaskID }
};
this.httpClient.post(this.MainHost, payload).subscribe(function (res) {
onSuccess(res);
}, function (err) {
onError(err);
});
};
/**
* Start Process By URL
* @param fileUrls: List Of URL's
* @param ApplicationToken: Application Token
* @param onSuccess: Success CallBack Function
* @param onError: Error CallBack Function
*/
/**
* Start Process By URL
* @param {?} fileUrls
* @param {?} ApplicationToken
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
SensifaiSdkNgxService.prototype.uploadByUrls = /**
* Start Process By URL
* @param {?} fileUrls
* @param {?} ApplicationToken
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
function (fileUrls, ApplicationToken, onSuccess, onError) {
/** @type {?} */
var payload = {
'query': 'mutation( $token: String!, $urls: [String!]! ){uploadByUrl( token: $token, urls: $urls){result error succeed{file taskId} cannotUpload}}',
'variables': {
'urls': fileUrls,
'token': ApplicationToken
}
};
this.httpClient.post(this.MainHost, payload).subscribe(function (res) {
onSuccess(res);
}, function (err) {
onError(err);
});
};
/**
* Start Process By Files
* @param fileInputValue: List Of Files
* @param ApplicationToken: Application Token
* @param onSuccess: Success CallBack Function
* @param onError: Error CallBack Function
*/
/**
* Start Process By Files
* @param {?} fileInputValue
* @param {?} ApplicationToken
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
SensifaiSdkNgxService.prototype.uploadByFiles = /**
* Start Process By Files
* @param {?} fileInputValue
* @param {?} ApplicationToken
* @param {?} onSuccess
* @param {?} onError
* @return {?}
*/
function (fileInputValue, ApplicationToken, onSuccess, onError) {
/** @type {?} */
var filesLength = fileInputValue.target.files.length;
/** @type {?} */
var formData = new FormData();
/**
* Create Base Object Query Variable *
* @type {?}
*/
var filesMap = {};
/** @type {?} */
var nullFiles = Array(filesLength).fill(null);
/** @type {?} */
var payload = {
'operationName': null,
'query': 'mutation( $token: String!, $files: [Upload!]! ){uploadByFile(token: $token, files: $files){result error succeed{file taskId} cannotUpload}}',
'variables': {
'files': nullFiles,
'token': ApplicationToken
}
};
/** Map Object Generator Loop **/
for (var i = 0, len = filesLength; i < len; i++) {
/** @type {?} */
var tempObj = {};
tempObj[i] = ['variables.files.' + i.toString()];
Object.assign(filesMap, tempObj);
}
/** Append Operation and Map to FormData Query **/
formData.append('operations', JSON.stringify(payload));
formData.append('map', JSON.stringify(filesMap));
/** Append Files To FormData **/
for (var file = 0, len = filesLength; file < len; file++) {
formData.append(file.toString(), fileInputValue.target.files[file]);
}
this.httpClient.post(this.MainHost, formData).subscribe(function (res) {
onSuccess(res);
}, function (err) {
onError(err);
});
};
SensifaiSdkNgxService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
SensifaiSdkNgxService.ctorParameters = function () { return [
{ type: HttpClient }
]; };
/** @nocollapse */ SensifaiSdkNgxService.ngInjectableDef = i0.defineInjectable({ factory: function SensifaiSdkNgxService_Factory() { return new SensifaiSdkNgxService(i0.inject(i1.HttpClient)); }, token: SensifaiSdkNgxService, providedIn: "root" });
return SensifaiSdkNgxService;
}());
export { SensifaiSdkNgxService };
if (false) {
/** @type {?} */
SensifaiSdkNgxService.prototype.MainHost;
/** @type {?} */
SensifaiSdkNgxService.prototype.httpClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vuc2lmYWktc2RrLW5neC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2Vuc2lmYWktc2RrLW5neC8iLCJzb3VyY2VzIjpbImxpYi9zZW5zaWZhaS1zZGstbmd4LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFFbEQ7SUFPRSwrQkFBcUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUZuQyxhQUFRLEdBQUcsK0JBQStCLENBQUM7SUFFSixDQUFDO0lBRWhEOzs7OztPQUtHOzs7Ozs7OztJQUNILGlEQUFpQjs7Ozs7OztJQUFqQixVQUFtQixNQUFjLEVBQUUsU0FBUyxFQUFFLE9BQU87O1lBQzdDLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxpa0JBQWlrQjtZQUMxa0IsV0FBVyxFQUFFLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtTQUNqQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFFLENBQUMsU0FBUyxDQUFFLFVBQVUsR0FBRztZQUNyRSxTQUFTLENBQUUsR0FBRyxDQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUFFLFVBQVUsR0FBRztZQUNkLE9BQU8sQ0FBRSxHQUFHLENBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7OztJQUNILDRDQUFZOzs7Ozs7OztJQUFaLFVBQWMsUUFBdUIsRUFBRSxnQkFBd0IsRUFBRSxTQUFTLEVBQUUsT0FBTzs7WUFDM0UsT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLDBJQUEwSTtZQUNuSixXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE9BQU8sRUFBRSxnQkFBZ0I7YUFDMUI7U0FDRjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFFLENBQUMsU0FBUyxDQUFFLFVBQVUsR0FBRztZQUNyRSxTQUFTLENBQUUsR0FBRyxDQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUFFLFVBQVUsR0FBRztZQUNkLE9BQU8sQ0FBRSxHQUFHLENBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7OztJQUNILDZDQUFhOzs7Ozs7OztJQUFiLFVBQWUsY0FBYyxFQUFFLGdCQUF3QixFQUFFLFNBQVMsRUFBRSxPQUFPOztZQUNuRSxXQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTs7WUFDaEQsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFOzs7OztZQUd6QixRQUFRLEdBQUcsRUFBRTs7WUFDYixTQUFTLEdBQUcsS0FBSyxDQUFFLFdBQVcsQ0FBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7O1lBQzNDLE9BQU8sR0FBRztZQUNkLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBVSw2SUFBNkk7WUFDOUosV0FBVyxFQUFNO2dCQUNmLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsZ0JBQWdCO2FBQzFCO1NBQ0Y7UUFFRCxpQ0FBaUM7UUFDakMsS0FBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFOztnQkFDMUMsT0FBTyxHQUFHLEVBQUU7WUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFFRCxrREFBa0Q7UUFDbEQsUUFBUSxDQUFDLE1BQU0sQ0FBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBRSxPQUFPLENBQUMsQ0FBRSxDQUFDO1FBQzFELFFBQVEsQ0FBQyxNQUFNLENBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUUsUUFBUSxDQUFFLENBQUUsQ0FBQztRQUVyRCxpQ0FBaUM7UUFDakMsS0FBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3pELFFBQVEsQ0FBQyxNQUFNLENBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFFLENBQUM7U0FDeEU7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBRSxDQUFDLFNBQVMsQ0FBRSxVQUFVLEdBQUc7WUFDdEUsU0FBUyxDQUFFLEdBQUcsQ0FBRSxDQUFDO1FBQ25CLENBQUMsRUFBRSxVQUFVLEdBQUc7WUFDZCxPQUFPLENBQUUsR0FBRyxDQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnQkE5RkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFKUSxVQUFVOzs7Z0NBRG5CO0NBa0dDLEFBL0ZELElBK0ZDO1NBNUZZLHFCQUFxQjs7O0lBRWhDLHlDQUFtRDs7SUFFdEMsMkNBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2Vuc2lmYWlTZGtOZ3hTZXJ2aWNlIHtcblxuICBwcml2YXRlIE1haW5Ib3N0ID0gJ2h0dHBzOi8vYXBpLnNlbnNpZmFpLmNvbS9hcGkvJztcblxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50ICkge31cblxuICAvKipcbiAgICogUmV0cmlldmUgUmVzdWx0IEJ5IFRhc2sgSURcbiAgICogQHBhcmFtIFRhc2tJRDogWW91ciBQcm9jZXNzIFRhc2sgSURcbiAgICogQHBhcmFtIG9uU3VjY2VzczogU3VjY2VzcyBDYWxsQmFjayBGdW5jdGlvblxuICAgKiBAcGFyYW0gb25FcnJvcjogRXJyb3IgQ2FsbEJhY2sgRnVuY3Rpb25cbiAgICovXG4gIGdldFJlc3VsdEJ5VGFza0lEKCBUYXNrSUQ6IHN0cmluZywgb25TdWNjZXNzLCBvbkVycm9yICkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAncXVlcnknOiAncXVlcnkoICR0YXNrSWQ6IFN0cmluZyEgKXthcGlSZXN1bHQoIHRhc2tJZDogJHRhc2tJZCl7IC4uLm9uIEltYWdlUmVzdWx0e2lzRG9uZSBlcnJvcnMgaW1hZ2VSZXN1bHRze25zZndSZXN1bHR7dHlwZSBwcm9iYWJpbGl0eSB2YWx1ZX1sb2dvUmVzdWx0e2Rlc2NyaXB0aW9ufWxhbmRtYXJrUmVzdWx0e2Rlc2NyaXB0aW9ufXRhZ2dpbmdSZXN1bHR7bGFiZWwgcHJvYmFiaWxpdHl9ZmFjZVJlc3VsdHtkZXRlY3RlZEJveGVzUGVyY2VudGFnZSBwcm9iYWJpbGl0eSBkZXRlY3RlZEZhY2UgbGFiZWx9fX0gLi4uIG9uIFZpZGVvUmVzdWx0e2ZwcyBkdXJhdGlvbiBpc0RvbmUgZnJhbWVzQ291bnQgZXJyb3JzIHZpZGVvUmVzdWx0c3tzdGFydFNlY29uZCBlbmRTZWNvbmQgc3RhcnRGcmFtZSBlbmRGcmFtZSB0aHVtYm5haWxQYXRoIHRhZ2dpbmdSZXN1bHR7bGFiZWwgcHJvYmFiaWxpdHl9YWN0aW9uUmVzdWx0e2xhYmVsIHByb2JhYmlsaXR5fWNlbGVicml0eVJlc3VsdHtuYW1lIGZyZXF1ZW5jeX0gc3BvcnRSZXN1bHR7bGFiZWwgcHJvYmFiaWxpdHl9bnNmd1Jlc3VsdHtwcm9iYWJpbGl0eSB0eXBlIHZhbHVlfX19fX0nLFxuICAgICAgJ3ZhcmlhYmxlcyc6IHsndGFza0lkJzogVGFza0lEIH1cbiAgICB9O1xuICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KCB0aGlzLk1haW5Ib3N0LCBwYXlsb2FkICkuc3Vic2NyaWJlKCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICBvblN1Y2Nlc3MoIHJlcyApO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIG9uRXJyb3IoIGVyciApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFByb2Nlc3MgQnkgVVJMXG4gICAqIEBwYXJhbSBmaWxlVXJsczogTGlzdCBPZiBVUkwnc1xuICAgKiBAcGFyYW0gQXBwbGljYXRpb25Ub2tlbjogQXBwbGljYXRpb24gVG9rZW5cbiAgICogQHBhcmFtIG9uU3VjY2VzczogU3VjY2VzcyBDYWxsQmFjayBGdW5jdGlvblxuICAgKiBAcGFyYW0gb25FcnJvcjogRXJyb3IgQ2FsbEJhY2sgRnVuY3Rpb25cbiAgICovXG4gIHVwbG9hZEJ5VXJscyggZmlsZVVybHM6IEFycmF5PHN0cmluZz4sIEFwcGxpY2F0aW9uVG9rZW46IHN0cmluZywgb25TdWNjZXNzLCBvbkVycm9yICkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAncXVlcnknOiAnbXV0YXRpb24oICR0b2tlbjogU3RyaW5nISwgJHVybHM6IFtTdHJpbmchXSEgKXt1cGxvYWRCeVVybCggdG9rZW46ICR0b2tlbiwgdXJsczogJHVybHMpe3Jlc3VsdCBlcnJvciBzdWNjZWVke2ZpbGUgdGFza0lkfSBjYW5ub3RVcGxvYWR9fScsXG4gICAgICAndmFyaWFibGVzJzoge1xuICAgICAgICAndXJscyc6IGZpbGVVcmxzLFxuICAgICAgICAndG9rZW4nOiBBcHBsaWNhdGlvblRva2VuXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KCB0aGlzLk1haW5Ib3N0LCBwYXlsb2FkICkuc3Vic2NyaWJlKCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICBvblN1Y2Nlc3MoIHJlcyApO1xuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIG9uRXJyb3IoIGVyciApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFByb2Nlc3MgQnkgRmlsZXNcbiAgICogQHBhcmFtIGZpbGVJbnB1dFZhbHVlOiBMaXN0IE9mIEZpbGVzXG4gICAqIEBwYXJhbSBBcHBsaWNhdGlvblRva2VuOiBBcHBsaWNhdGlvbiBUb2tlblxuICAgKiBAcGFyYW0gb25TdWNjZXNzOiBTdWNjZXNzIENhbGxCYWNrIEZ1bmN0aW9uXG4gICAqIEBwYXJhbSBvbkVycm9yOiBFcnJvciBDYWxsQmFjayBGdW5jdGlvblxuICAgKi9cbiAgdXBsb2FkQnlGaWxlcyggZmlsZUlucHV0VmFsdWUsIEFwcGxpY2F0aW9uVG9rZW46IHN0cmluZywgb25TdWNjZXNzLCBvbkVycm9yICkge1xuICAgIGNvbnN0IGZpbGVzTGVuZ3RoID0gZmlsZUlucHV0VmFsdWUudGFyZ2V0LmZpbGVzLmxlbmd0aDtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgLyoqIENyZWF0ZSBCYXNlIE9iamVjdCBRdWVyeSBWYXJpYWJsZSAqKi9cbiAgICBjb25zdCBmaWxlc01hcCA9IHt9O1xuICAgIGNvbnN0IG51bGxGaWxlcyA9IEFycmF5KCBmaWxlc0xlbmd0aCApLmZpbGwobnVsbCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICdvcGVyYXRpb25OYW1lJzogbnVsbCxcbiAgICAgICdxdWVyeScgICAgICAgIDogJ211dGF0aW9uKCAkdG9rZW46IFN0cmluZyEsICRmaWxlczogW1VwbG9hZCFdISApe3VwbG9hZEJ5RmlsZSh0b2tlbjogJHRva2VuLCBmaWxlczogJGZpbGVzKXtyZXN1bHQgZXJyb3Igc3VjY2VlZHtmaWxlIHRhc2tJZH0gY2Fubm90VXBsb2FkfX0nLFxuICAgICAgJ3ZhcmlhYmxlcycgICAgOiB7XG4gICAgICAgICdmaWxlcyc6IG51bGxGaWxlcyxcbiAgICAgICAgJ3Rva2VuJzogQXBwbGljYXRpb25Ub2tlblxuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogTWFwIE9iamVjdCBHZW5lcmF0b3IgTG9vcCAqKi9cbiAgICBmb3IgKCBsZXQgaSA9IDAsIGxlbiA9IGZpbGVzTGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IHRlbXBPYmogPSB7fTtcbiAgICAgIHRlbXBPYmpbaV0gID0gWyd2YXJpYWJsZXMuZmlsZXMuJyArIGkudG9TdHJpbmcoKV07XG4gICAgICBPYmplY3QuYXNzaWduKCBmaWxlc01hcCwgdGVtcE9iaik7XG4gICAgfVxuXG4gICAgLyoqIEFwcGVuZCBPcGVyYXRpb24gYW5kIE1hcCB0byBGb3JtRGF0YSBRdWVyeSAqKi9cbiAgICBmb3JtRGF0YS5hcHBlbmQoICdvcGVyYXRpb25zJywgSlNPTi5zdHJpbmdpZnkoIHBheWxvYWQpICk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCAnbWFwJywgSlNPTi5zdHJpbmdpZnkoIGZpbGVzTWFwICkgKTtcblxuICAgIC8qKiBBcHBlbmQgRmlsZXMgVG8gRm9ybURhdGEgICoqL1xuICAgIGZvciAoIGxldCBmaWxlID0gMCwgbGVuID0gZmlsZXNMZW5ndGg7IGZpbGUgPCBsZW47IGZpbGUrKykge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCBmaWxlLnRvU3RyaW5nKCkgLCBmaWxlSW5wdXRWYWx1ZS50YXJnZXQuZmlsZXNbZmlsZV0gKTtcbiAgICB9XG5cbiAgICB0aGlzLmh0dHBDbGllbnQucG9zdCggdGhpcy5NYWluSG9zdCwgZm9ybURhdGEgKS5zdWJzY3JpYmUoIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIG9uU3VjY2VzcyggcmVzICk7XG4gICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgb25FcnJvciggZXJyICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==