ngx-jenga-api
Version:
Angular wrapper for Equity's Jenga API. Still in progress
86 lines • 17 kB
JavaScript
import { Component, Input } from '@angular/core';
import { Validators } from '@angular/forms';
import { Subject, takeUntil } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../../services/api.service";
import * as i2 from "../../services/general.service";
import * as i3 from "@angular/forms";
import * as i4 from "../../services/auth.service";
import * as i5 from "@angular/material/form-field";
import * as i6 from "@angular/material/button";
import * as i7 from "@angular/material/input";
import * as i8 from "@angular/material/card";
export class MerchantPaymentsComponent {
constructor(api, general, formbuilder, authenticateEndpoint) {
this.api = api;
this.general = general;
this.formbuilder = formbuilder;
this.authenticateEndpoint = authenticateEndpoint;
this.destroyComponent = new Subject();
this.authenticateEndpoint.authenticateMerchant().subscribe({
next: (res) => {
localStorage.setItem('jenga-tkn', res.accessToken);
},
error: (e) => {
throw new Error(e.error.message);
}
});
}
ngOnInit() {
this.merchantForm = this.formbuilder.group({
till: [this.till, [Validators.required]],
uniqueRef: [this.general.generateRandomString(12), [Validators.required]],
amount: [this.amount, [Validators.required]],
currency: [this.currency, [Validators.required]],
bankId: [this.bankId, [Validators.required]],
mobileNumber: [this.mobileNumber, [Validators.required]],
});
}
ngOnDestroy() {
this.destroyComponent.next();
this.destroyComponent.complete();
}
merchantPayments() {
const data = {
merchant: {
till: this.merchantForm.value.till
},
payment: {
ref: this.merchantForm.value.uniqueRef,
amount: this.merchantForm.value.amount,
currency: this.merchantForm.value.currency
},
partner: {
id: this.merchantForm.value.bankId,
ref: this.merchantForm.value.mobileNumber
}
};
this.api.receiveMerchantPayments(data).pipe(takeUntil(this.destroyComponent)).subscribe({
next: (res) => {
console.log(res);
},
error: (e) => {
throw new Error(e.error.message);
}
});
}
}
MerchantPaymentsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MerchantPaymentsComponent, deps: [{ token: i1.ApiService }, { token: i2.GeneralService }, { token: i3.FormBuilder }, { token: i4.AuthService }], target: i0.ɵɵFactoryTarget.Component });
MerchantPaymentsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: MerchantPaymentsComponent, selector: "jenga-merchant-payments", inputs: { till: "till", uniqueRef: "uniqueRef", amount: "amount", currency: "currency", bankId: "bankId", mobileNumber: "mobileNumber" }, ngImport: i0, template: "<mat-card>\n <form class=\"user-form\" [formGroup]=\"merchantForm\">\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Till number</mat-label>\n <input matInput formControlName=\"till\">\n <mat-error>Kindly add the till number</mat-error>\n </mat-form-field>\n <br>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Amount</mat-label>\n <input matInput formControlName=\"amount\">\n <mat-error>Kindly add your amount</mat-error>\n </mat-form-field>\n <br>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Mobile Number</mat-label>\n <input matInput formControlName=\"mobileNumber\">\n <mat-error>Kindly add a mobile number</mat-error>\n </mat-form-field>\n <br>\n\n <button [disabled]=\"!merchantForm.valid\" (click)=\"merchantPayments()\" mat-raised-button color=\"primary\">Make Payment</button>\n\n </form>\n</mat-card>", styles: ["mat-card{width:inherit}.user-form{display:inline-grid;padding:30px}\n"], dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MerchantPaymentsComponent, decorators: [{
type: Component,
args: [{ selector: 'jenga-merchant-payments', template: "<mat-card>\n <form class=\"user-form\" [formGroup]=\"merchantForm\">\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Till number</mat-label>\n <input matInput formControlName=\"till\">\n <mat-error>Kindly add the till number</mat-error>\n </mat-form-field>\n <br>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Amount</mat-label>\n <input matInput formControlName=\"amount\">\n <mat-error>Kindly add your amount</mat-error>\n </mat-form-field>\n <br>\n\n <mat-form-field class=\"form-field\" appearance=\"outline\">\n <mat-label>Mobile Number</mat-label>\n <input matInput formControlName=\"mobileNumber\">\n <mat-error>Kindly add a mobile number</mat-error>\n </mat-form-field>\n <br>\n\n <button [disabled]=\"!merchantForm.valid\" (click)=\"merchantPayments()\" mat-raised-button color=\"primary\">Make Payment</button>\n\n </form>\n</mat-card>", styles: ["mat-card{width:inherit}.user-form{display:inline-grid;padding:30px}\n"] }]
}], ctorParameters: function () { return [{ type: i1.ApiService }, { type: i2.GeneralService }, { type: i3.FormBuilder }, { type: i4.AuthService }]; }, propDecorators: { till: [{
type: Input
}], uniqueRef: [{
type: Input
}], amount: [{
type: Input
}], currency: [{
type: Input
}], bankId: [{
type: Input
}], mobileNumber: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyY2hhbnQtcGF5bWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWplbmdhLWFwaS9zcmMvbGliL2NvbXBvbmVudHMvbWVyY2hhbnQtcGF5bWVudHMvbWVyY2hhbnQtcGF5bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWplbmdhLWFwaS9zcmMvbGliL2NvbXBvbmVudHMvbWVyY2hhbnQtcGF5bWVudHMvbWVyY2hhbnQtcGF5bWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFXMUMsTUFBTSxPQUFPLHlCQUF5QjtJQWNwQyxZQUNVLEdBQWUsRUFDZixPQUF1QixFQUN2QixXQUF3QixFQUN4QixvQkFBaUM7UUFIakMsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBYTtRQWhCM0MscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQWtCcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3pELElBQUksRUFBRSxDQUFDLEdBQU8sRUFBRSxFQUFFO2dCQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDcEQsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLENBQUssRUFBRSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNsQyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pELENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFBO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBR0QsZ0JBQWdCO1FBQ2QsTUFBTSxJQUFJLEdBQXNCO1lBQzlCLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNuQztZQUNELE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUztnQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRO2FBQzNDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUNsQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWTthQUMxQztTQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksRUFBRSxDQUFDLEdBQU8sRUFBRSxFQUFFO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxDQUFLLEVBQUUsRUFBRTtnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNOLENBQUM7O3NIQXZFVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix5TUNidEMsNGpDQTJCVzsyRkRkRSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UseUJBQXlCO2tMQVUxQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTWVyY2hhbnRQYXltZW50cywgSXJlY01lcmNoYW50UGF5bWVudHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyYWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2plbmdhLW1lcmNoYW50LXBheW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lcmNoYW50LXBheW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVyY2hhbnQtcGF5bWVudHMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1lcmNoYW50UGF5bWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgZGVzdHJveUNvbXBvbmVudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgbWVyY2hhbnRGb3JtITogRm9ybUdyb3VwXG4gIHBheW1lbnREYXRhITogSU1lcmNoYW50UGF5bWVudHNcblxuICBASW5wdXQoKSB0aWxsITogc3RyaW5nXG4gIEBJbnB1dCgpIHVuaXF1ZVJlZiE6IHN0cmluZ1xuICBASW5wdXQoKSBhbW91bnQhOiBzdHJpbmdcbiAgQElucHV0KCkgY3VycmVuY3khOiBzdHJpbmdcbiAgQElucHV0KCkgYmFua0lkITogc3RyaW5nXG4gIEBJbnB1dCgpIG1vYmlsZU51bWJlciE6IHN0cmluZ1xuXG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwaTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGdlbmVyYWw6IEdlbmVyYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybWJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYXV0aGVudGljYXRlRW5kcG9pbnQ6IEF1dGhTZXJ2aWNlXG4gICl7XG4gICAgdGhpcy5hdXRoZW50aWNhdGVFbmRwb2ludC5hdXRoZW50aWNhdGVNZXJjaGFudCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOmFueSkgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnamVuZ2EtdGtuJywgcmVzLmFjY2Vzc1Rva2VuKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZTphbnkpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUuZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tZXJjaGFudEZvcm0gPSB0aGlzLmZvcm1idWlsZGVyLmdyb3VwKHtcbiAgICAgIHRpbGw6IFt0aGlzLnRpbGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB1bmlxdWVSZWY6IFt0aGlzLmdlbmVyYWwuZ2VuZXJhdGVSYW5kb21TdHJpbmcoMTIpLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYW1vdW50OiBbdGhpcy5hbW91bnQsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjdXJyZW5jeTogW3RoaXMuY3VycmVuY3ksIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBiYW5rSWQ6IFt0aGlzLmJhbmtJZCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIG1vYmlsZU51bWJlcjogW3RoaXMubW9iaWxlTnVtYmVyLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lDb21wb25lbnQubmV4dCgpXG4gICAgdGhpcy5kZXN0cm95Q29tcG9uZW50LmNvbXBsZXRlKClcbiAgfVxuXG4gIFxuICBtZXJjaGFudFBheW1lbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IElNZXJjaGFudFBheW1lbnRzID0ge1xuICAgICAgbWVyY2hhbnQ6IHtcbiAgICAgICAgdGlsbDogdGhpcy5tZXJjaGFudEZvcm0udmFsdWUudGlsbFxuICAgICAgfSxcbiAgICAgIHBheW1lbnQ6IHtcbiAgICAgICAgcmVmOiB0aGlzLm1lcmNoYW50Rm9ybS52YWx1ZS51bmlxdWVSZWYsXG4gICAgICAgIGFtb3VudDogdGhpcy5tZXJjaGFudEZvcm0udmFsdWUuYW1vdW50LFxuICAgICAgICBjdXJyZW5jeTogdGhpcy5tZXJjaGFudEZvcm0udmFsdWUuY3VycmVuY3lcbiAgICAgIH0sXG4gICAgICBwYXJ0bmVyOiB7XG4gICAgICAgIGlkOiB0aGlzLm1lcmNoYW50Rm9ybS52YWx1ZS5iYW5rSWQsXG4gICAgICAgIHJlZjogdGhpcy5tZXJjaGFudEZvcm0udmFsdWUubW9iaWxlTnVtYmVyXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXBpLnJlY2VpdmVNZXJjaGFudFBheW1lbnRzKGRhdGEpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95Q29tcG9uZW50KSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczphbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZTphbnkpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZS5lcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG59XG4iLCI8bWF0LWNhcmQ+XG4gICAgPGZvcm0gY2xhc3M9XCJ1c2VyLWZvcm1cIiBbZm9ybUdyb3VwXT1cIm1lcmNoYW50Rm9ybVwiPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tZmllbGRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaWxsIG51bWJlcjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInRpbGxcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3I+S2luZGx5IGFkZCB0aGUgdGlsbCBudW1iZXI8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJyPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tZmllbGRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5BbW91bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3I+S2luZGx5IGFkZCB5b3VyIGFtb3VudDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnI+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS1maWVsZFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vYmlsZSBOdW1iZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVOdW1iZXJcIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3I+S2luZGx5IGFkZCBhIG1vYmlsZSBudW1iZXI8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJyPlxuXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFtZXJjaGFudEZvcm0udmFsaWRcIiAoY2xpY2spPVwibWVyY2hhbnRQYXltZW50cygpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+TWFrZSBQYXltZW50PC9idXR0b24+XG5cbiAgICA8L2Zvcm0+XG48L21hdC1jYXJkPiJdfQ==