@dangl/angular-ava 1.1.2-beta0008 → 1.1.2-beta0013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ava-tree/invoice/invoice-display/invoice-display.component.mjs +3 -3
- package/esm2022/lib/ava-tree/tree/components/ava-tree/ava-tree.component.mjs +2 -2
- package/esm2022/lib/ava-tree/tree/model/index.mjs +3 -2
- package/esm2022/lib/version.mjs +7 -7
- package/fesm2022/dangl-angular-ava.mjs +57 -11
- package/fesm2022/dangl-angular-ava.mjs.map +1 -1
- package/lib/ava-tree/tree/model/index.d.ts +2 -1
- package/package.json +1 -1
|
@@ -57,12 +57,12 @@ export class InvoiceDisplayComponent {
|
|
|
57
57
|
this._textWords = { ...DEFAULT_TEXT_WORD_INVOICE };
|
|
58
58
|
}
|
|
59
59
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n <p>\n <strong>{{ textWords?.vatId }}:</strong> {{ invoice().seller?.vatId }}\n </p>\n </div>\n <div class=\"invoice-details\">\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong> {{ invoice().invoiceNumber }}\n </p>\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong> {{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}\n </p>\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong> {{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}\n </p>\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong> {{ invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong> {{ invoice().paymentTerms }}\n </p>\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n <p>\n <strong>{{ textWords?.vatId }}:</strong> {{ invoice().buyer?.vatId }}\n </p>\n </div>\n </header>\n\n <section class=\"invoice-references\">\n <h2>{{ textWords?.referencesTopic }}</h2>\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong> {{ invoice().references?.buyerReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong> {{ invoice().references?.projectReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong> {{ invoice().references?.contractReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong> {{ invoice().references?.purchaseOrderReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong> {{ invoice().references?.salesOrderReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong> {{ invoice().references?.receivingAdviceReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong> {{ invoice().references?.dispatchAdviceReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong> {{ invoice().references?.tenderOrLotReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong> {{ invoice().references?.invoicedObjectIdentifier }}\n </p>\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n <h2>{{ textWords?.totalsTopic }}</h2>\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong> {{ invoice().totals?.totalNet | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n {{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong> {{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n {{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}\n </p>\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n </section>\n\n <section class=\"payment-instructions\">\n <h2>{{ textWords?.instructionsTopic }}</h2>\n <p>{{ invoice().paymentInstructions?.description }}</p>\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong> {{ means.accountIdentifier }}\n </p>\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong> {{ means.accountName }}\n </p>\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong> {{ means.serviceProviderIdentifier }}\n </p>\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords?.notesTopic }}</h2>\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n <p>\n <strong>{{ note.shortText }}</strong>\n </p>\n <p>{{ note.longText }}</p>\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
61
|
}
|
|
62
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
|
|
63
63
|
type: Component,
|
|
64
|
-
args: [{ selector: 'ava-invoice-display', standalone: true, imports: [CurrencyPipe, DatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n <p>\n <strong>{{ textWords?.vatId }}:</strong> {{ invoice().seller?.vatId }}\n </p>\n </div>\n <div class=\"invoice-details\">\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong> {{ invoice().invoiceNumber }}\n </p>\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong> {{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}\n </p>\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong> {{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}\n </p>\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong> {{ invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong> {{ invoice().paymentTerms }}\n </p>\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n <p>\n <strong>{{ textWords?.vatId }}:</strong> {{ invoice().buyer?.vatId }}\n </p>\n </div>\n </header>\n\n <section class=\"invoice-references\">\n <h2>{{ textWords?.referencesTopic }}</h2>\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong> {{ invoice().references?.buyerReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong> {{ invoice().references?.projectReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong> {{ invoice().references?.contractReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong> {{ invoice().references?.purchaseOrderReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong> {{ invoice().references?.salesOrderReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong> {{ invoice().references?.receivingAdviceReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong> {{ invoice().references?.dispatchAdviceReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong> {{ invoice().references?.tenderOrLotReference }}\n </p>\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong> {{ invoice().references?.invoicedObjectIdentifier }}\n </p>\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n <h2>{{ textWords?.totalsTopic }}</h2>\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong> {{ invoice().totals?.totalNet | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n {{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong> {{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}\n </p>\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n {{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}\n </p>\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n </section>\n\n <section class=\"payment-instructions\">\n <h2>{{ textWords?.instructionsTopic }}</h2>\n <p>{{ invoice().paymentInstructions?.description }}</p>\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong> {{ means.accountIdentifier }}\n </p>\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong> {{ means.accountName }}\n </p>\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong> {{ means.serviceProviderIdentifier }}\n </p>\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords?.notesTopic }}</h2>\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n <p>\n <strong>{{ note.shortText }}</strong>\n </p>\n <p>{{ note.longText }}</p>\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"] }]
|
|
64
|
+
args: [{ selector: 'ava-invoice-display', standalone: true, imports: [CurrencyPipe, DatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"] }]
|
|
65
65
|
}], ctorParameters: () => [], propDecorators: { textWords: [{
|
|
66
66
|
type: Input
|
|
67
67
|
}] } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQVl4RixNQUFNLE9BQU8sdUJBQXVCO0lBSWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlDRztJQUNILElBQWEsU0FBUyxDQUFDLEtBQThCO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDLENBQUMsaURBQWlEO0lBQ25ELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0Q7UUFuREEsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUM1QixlQUFVLEdBQTRCLElBQUksQ0FBQztRQW1EakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzhHQXREVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw2VkNmcEMsNHdNQW9LQSxvMEJEMUpZLFlBQVksNENBQUUsUUFBUTs7MkZBS3JCLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTt3REFnRGxDLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH0gZnJvbSAnLi4vLi4vdHJlZS9jb25zdGFudHMvZGVmYXVsdFRleHRXb3JkSW52b2ljZSc7XG5pbXBvcnQgeyBJVGV4dFdvcmRJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbC9pbnZvaWNlLW1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F2YS1pbnZvaWNlLWRpc3BsYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ3VycmVuY3lQaXBlLCBEYXRlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnZvaWNlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZURpc3BsYXlDb21wb25lbnQge1xuICBpbnZvaWNlID0gaW5wdXQucmVxdWlyZWQ8SW52b2ljZT4oKTtcbiAgcHJpdmF0ZSBfdGV4dFdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgaW52b2ljZVRpdGxlPzogc3RyaW5nO1xuICAgKiAgIHZhdElkPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlTnVtYmVyPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlRGF0ZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudER1ZURhdGU/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudFRlcm1zPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUb3BpYz86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzQnV5ZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0NvbnRyYWN0UmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNQdXJjaGFzZU9yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNTYWxlc09yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNSZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUZW5kZXJPckxvdFJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzSW52b2ljZWRPYmplY3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFF1YW50aXR5Pzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFVuaXQ/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0UHJpY2U/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0QW1vdW50Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvcGljPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsTmV0Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsQWxsb3dhbmNlcz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbENoYXJnZXM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxBZnRlckRlZHVjdGlvbnM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxWYXRBbW91bnQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxHcm9zcz86IHN0cmluZztcbiAgICogICB0b3RhbHNBbHJlYWR5UGFpZFRvdGFsPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsVG9CZVBhaWQ/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zVG9waWM/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudElkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWU/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgICogICBub3Rlc1RvcGljPzogc3RyaW5nO1xuICAgKiB9XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGV4dFdvcmRzKHdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4udGhpcy50ZXh0V29yZHMsIC4uLndvcmRzIH07XG4gIH0gLy8gYWxsb3cgdG8gdHJhbnNsYXRlIGFsbCB0ZXh0cyB0byBvdGhlciBsYW5ndWFnZVxuICBnZXQgdGV4dFdvcmRzKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0V29yZHM7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlLWNvbnRhaW5lclwiPlxuICA8IS0tIFNlbGxlciBhbmQgQnV5ZXIgSW5mb3JtYXRpb24gLS0+XG4gIDxoMSBjbGFzcz1cImludm9pY2UtdGl0bGVcIj57eyB0ZXh0V29yZHM/Lmludm9pY2VUaXRsZSB9fTwvaDE+XG4gIDxoZWFkZXIgY2xhc3M9XCJpbnZvaWNlLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxsZXItaW5mb1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgaW52b2ljZSgpLnNlbGxlcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLnNlbGxlcj8uYWRkcmVzcyB9fTwvcD5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5zZWxsZXI/LmNpdHkgfX0sIHt7IGludm9pY2UoKS5zZWxsZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuc2VsbGVyPy5jb3VudHJ5Q29kZSB9fTwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udmF0SWQgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS5zZWxsZXI/LnZhdElkIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImludm9pY2UtZGV0YWlsc1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzSW52b2ljZU51bWJlciB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLmludm9pY2VOdW1iZXIgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0ludm9pY2VEYXRlIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkuaW52b2ljZURhdGUgfCBkYXRlOiAnZGQuTU0ueXl5eScgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnREdWVEYXRlIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkucGF5bWVudER1ZURhdGUgfCBkYXRlOiAnZGQuTU0ueXl5eScgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0N1cnJlbmN5Q29kZSB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzUGF5bWVudFRlcm1zIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkucGF5bWVudFRlcm1zIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1eWVyLWluZm9cIj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IGludm9pY2UoKS5idXllcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5hZGRyZXNzIH19PC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5jaXR5IH19LCB7eyBpbnZvaWNlKCkuYnV5ZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuYnV5ZXI/LmNvdW50cnlDb2RlIH19PC9wPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy52YXRJZCB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLmJ1eWVyPy52YXRJZCB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cblxuICA8c2VjdGlvbiBjbGFzcz1cImludm9pY2UtcmVmZXJlbmNlc1wiPlxuICAgIDxoMj57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNUb3BpYyB9fTwvaDI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0J1eWVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UgfX1cbiAgICA8L3A+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5wcm9qZWN0UmVmZXJlbmNlIH19XG4gICAgPC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNDb250cmFjdFJlZmVyZW5jZSB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LmNvbnRyYWN0UmVmZXJlbmNlIH19XG4gICAgPC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNQdXJjaGFzZU9yZGVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8ucHVyY2hhc2VPcmRlclJlZmVyZW5jZSB9fVxuICAgIDwvcD5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzU2FsZXNPcmRlclJlZmVyZW5jZSB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnNhbGVzT3JkZXJSZWZlcmVuY2UgfX1cbiAgICA8L3A+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTo8L3N0cm9uZz4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnJlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fVxuICAgIDwvcD5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzRGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2UgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5kaXNwYXRjaEFkdmljZVJlZmVyZW5jZSB9fVxuICAgIDwvcD5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzVGVuZGVyT3JMb3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSB9fVxuICAgIDwvcD5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzSW52b2ljZWRPYmplY3RJZGVudGlmaWVyIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uaW52b2ljZWRPYmplY3RJZGVudGlmaWVyIH19XG4gICAgPC9wPlxuICA8L3NlY3Rpb24+XG5cbiAgPHRhYmxlIGNsYXNzPVwiaW52b2ljZS10YWJsZVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPiM8L3RoPlxuICAgICAgICA8dGg+e3sgdGV4dFdvcmRzPy50YWJsZUhlYWREZXNjcmlwdGlvbiB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZFF1YW50aXR5IH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkVW5pdCB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZE5ldFByaWNlIH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkTmV0QW1vdW50IH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChpdGVtIG9mIGludm9pY2UoKS5saW5lSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLml0ZW1JbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLnF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS51bml0Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGl0ZW0ucHJpY2VEZXRhaWxzPy5uZXRQcmljZSB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS5uZXRBbW91bnQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2IGNsYXNzPVwiYWRkaXRpb24taW5mb1wiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS10b3RhbHNcIj5cbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/LnRvdGFsc1RvcGljIH19PC9oMj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxOZXQgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsTmV0IHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxBbGxvd2FuY2VzIH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFsbG93YW5jZXMgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbENoYXJnZXMgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsQ2hhcmdlcyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQWZ0ZXJEZWR1Y3Rpb25zIH19Ojwvc3Ryb25nPlxuICAgICAgICB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFmdGVyRGVkdWN0aW9ucyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVmF0QW1vdW50IH19Ojwvc3Ryb25nPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbFZhdEFtb3VudCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19XG4gICAgICA8L3A+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsR3Jvc3MgfX06PC9zdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsR3Jvc3MgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNBbHJlYWR5UGFpZFRvdGFsIH19Ojwvc3Ryb25nPlxuICAgICAgICB7eyBpbnZvaWNlKCkudG90YWxzPy5hbHJlYWR5UGFpZFRvdGFsIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxwIGNsYXNzPVwidG90YWxcIj5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVG9CZVBhaWQgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwicGF5bWVudC1pbnN0cnVjdGlvbnNcIj5cbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljIH19PC9oMj5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIEBmb3IgKG1lYW5zIG9mIGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5wYXltZW50TWVhbnM7IHRyYWNrIG1lYW5zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zQWNjb3VudElkZW50aWZpZXIgfX06PC9zdHJvbmc+IHt7IG1lYW5zLmFjY291bnRJZGVudGlmaWVyIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc0FjY291bnROYW1lIH19Ojwvc3Ryb25nPiB7eyBtZWFucy5hY2NvdW50TmFtZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5pbnN0cnVjdGlvbnNTZXJ2aWNlUHJvdmlkZXJJZGVudGlmaWVyIH19Ojwvc3Ryb25nPiB7eyBtZWFucy5zZXJ2aWNlUHJvdmlkZXJJZGVudGlmaWVyIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS1ub3Rlc1wiPlxuICAgIDxoMj57eyB0ZXh0V29yZHM/Lm5vdGVzVG9waWMgfX08L2gyPlxuICAgIEBmb3IgKG5vdGUgb2YgaW52b2ljZSgpLmludm9pY2VOb3RlczsgdHJhY2sgbm90ZSkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyBub3RlLnNob3J0VGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPnt7IG5vdGUubG9uZ1RleHQgfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQVl4RixNQUFNLE9BQU8sdUJBQXVCO0lBSWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlDRztJQUNILElBQWEsU0FBUyxDQUFDLEtBQThCO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDLENBQUMsaURBQWlEO0lBQ25ELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0Q7UUFuREEsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUM1QixlQUFVLEdBQTRCLElBQUksQ0FBQztRQW1EakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzhHQXREVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw2VkNmcEMsaTVSQWtRQSxvMEJEeFBZLFlBQVksNENBQUUsUUFBUTs7MkZBS3JCLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTt3REFnRGxDLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH0gZnJvbSAnLi4vLi4vdHJlZS9jb25zdGFudHMvZGVmYXVsdFRleHRXb3JkSW52b2ljZSc7XG5pbXBvcnQgeyBJVGV4dFdvcmRJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbC9pbnZvaWNlLW1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F2YS1pbnZvaWNlLWRpc3BsYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ3VycmVuY3lQaXBlLCBEYXRlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnZvaWNlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZURpc3BsYXlDb21wb25lbnQge1xuICBpbnZvaWNlID0gaW5wdXQucmVxdWlyZWQ8SW52b2ljZT4oKTtcbiAgcHJpdmF0ZSBfdGV4dFdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgaW52b2ljZVRpdGxlPzogc3RyaW5nO1xuICAgKiAgIHZhdElkPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlTnVtYmVyPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlRGF0ZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudER1ZURhdGU/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudFRlcm1zPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUb3BpYz86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzQnV5ZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0NvbnRyYWN0UmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNQdXJjaGFzZU9yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNTYWxlc09yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNSZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUZW5kZXJPckxvdFJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzSW52b2ljZWRPYmplY3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFF1YW50aXR5Pzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFVuaXQ/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0UHJpY2U/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0QW1vdW50Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvcGljPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsTmV0Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsQWxsb3dhbmNlcz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbENoYXJnZXM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxBZnRlckRlZHVjdGlvbnM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxWYXRBbW91bnQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxHcm9zcz86IHN0cmluZztcbiAgICogICB0b3RhbHNBbHJlYWR5UGFpZFRvdGFsPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsVG9CZVBhaWQ/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zVG9waWM/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudElkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWU/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgICogICBub3Rlc1RvcGljPzogc3RyaW5nO1xuICAgKiB9XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGV4dFdvcmRzKHdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4udGhpcy50ZXh0V29yZHMsIC4uLndvcmRzIH07XG4gIH0gLy8gYWxsb3cgdG8gdHJhbnNsYXRlIGFsbCB0ZXh0cyB0byBvdGhlciBsYW5ndWFnZVxuICBnZXQgdGV4dFdvcmRzKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0V29yZHM7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlLWNvbnRhaW5lclwiPlxuICA8IS0tIFNlbGxlciBhbmQgQnV5ZXIgSW5mb3JtYXRpb24gLS0+XG4gIEBpZiAodGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUpIHtcbiAgICA8aDEgY2xhc3M9XCJpbnZvaWNlLXRpdGxlXCI+e3sgdGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUgfX08L2gxPlxuICB9XG4gIDxoZWFkZXIgY2xhc3M9XCJpbnZvaWNlLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxsZXItaW5mb1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgaW52b2ljZSgpLnNlbGxlcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLnNlbGxlcj8uYWRkcmVzcyB9fTwvcD5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5zZWxsZXI/LmNpdHkgfX0sIHt7IGludm9pY2UoKS5zZWxsZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuc2VsbGVyPy5jb3VudHJ5Q29kZSB9fTwvcD5cbiAgICAgIEBpZiAoaW52b2ljZSgpLnNlbGxlcj8udmF0SWQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnZhdElkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5zZWxsZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImludm9pY2UtZGV0YWlsc1wiPlxuICAgICAgQGlmIChpbnZvaWNlKCkuaW52b2ljZU51bWJlcikge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0ludm9pY2VOdW1iZXIgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLmludm9pY2VEYXRlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzSW52b2ljZURhdGUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VEYXRlIHwgZGF0ZTogJ2RkLk1NLnl5eXknIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSkge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnREdWVEYXRlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSB8IGRhdGU6ICdkZC5NTS55eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzQ3VycmVuY3lDb2RlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRUZXJtcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnRUZXJtcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucGF5bWVudFRlcm1zIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1eWVyLWluZm9cIj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IGludm9pY2UoKS5idXllcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5hZGRyZXNzIH19PC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5jaXR5IH19LCB7eyBpbnZvaWNlKCkuYnV5ZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuYnV5ZXI/LmNvdW50cnlDb2RlIH19PC9wPlxuICAgICAgQGlmIChpbnZvaWNlKCkuYnV5ZXI/LnZhdElkKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy52YXRJZCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkuYnV5ZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvaGVhZGVyPlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS1yZWZlcmVuY2VzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/LnJlZmVyZW5jZXNUb3BpYykge1xuICAgICAgPGgyPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1RvcGljIH19PC9oMj5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0J1eWVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnByb2plY3RSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5wcm9qZWN0UmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzQ29udHJhY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8ucHVyY2hhc2VPcmRlclJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzUHVyY2hhc2VPcmRlclJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnB1cmNoYXNlT3JkZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnNhbGVzT3JkZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1NhbGVzT3JkZXJSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5zYWxlc09yZGVyUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5yZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnJlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uZGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LmRpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzVGVuZGVyT3JMb3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uaW52b2ljZWRPYmplY3RJZGVudGlmaWVyKSB7XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNJbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5pbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICA8L3NlY3Rpb24+XG5cbiAgPHRhYmxlIGNsYXNzPVwiaW52b2ljZS10YWJsZVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPiM8L3RoPlxuICAgICAgICA8dGg+e3sgdGV4dFdvcmRzPy50YWJsZUhlYWREZXNjcmlwdGlvbiB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZFF1YW50aXR5IH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkVW5pdCB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZE5ldFByaWNlIH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkTmV0QW1vdW50IH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChpdGVtIG9mIGludm9pY2UoKS5saW5lSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLml0ZW1JbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLnF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS51bml0Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGl0ZW0ucHJpY2VEZXRhaWxzPy5uZXRQcmljZSB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS5uZXRBbW91bnQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2IGNsYXNzPVwiYWRkaXRpb24taW5mb1wiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS10b3RhbHNcIj5cbiAgICAgIEBpZiAodGV4dFdvcmRzPy50b3RhbHNUb3BpYykge1xuICAgICAgICA8aDI+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3BpYyB9fTwvaDI+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsTmV0KSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbE5ldCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbE5ldCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWxsb3dhbmNlcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxBbGxvd2FuY2VzIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFsbG93YW5jZXMgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkudG90YWxzPy50b3RhbENoYXJnZXMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQ2hhcmdlcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxDaGFyZ2VzIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxBZnRlckRlZHVjdGlvbnMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQWZ0ZXJEZWR1Y3Rpb25zIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWZ0ZXJEZWR1Y3Rpb25zIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxWYXRBbW91bnQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVmF0QW1vdW50IH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVmF0QW1vdW50IHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxHcm9zcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LmFscmVhZHlQYWlkVG90YWwpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc0FscmVhZHlQYWlkVG90YWwgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnRvdGFscz8uYWxyZWFkeVBhaWRUb3RhbCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJ0b3RhbFwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbFRvQmVQYWlkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwYXltZW50LWluc3RydWN0aW9uc1wiPlxuICAgICAgQGlmICh0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljKSB7XG4gICAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljIH19PC9oMj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRJbnN0cnVjdGlvbnM/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIDxwPnt7IGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIH1cbiAgICAgIEBmb3IgKG1lYW5zIG9mIGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5wYXltZW50TWVhbnM7IHRyYWNrIG1lYW5zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmIChtZWFucy5hY2NvdW50SWRlbnRpZmllcikge1xuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5pbnN0cnVjdGlvbnNBY2NvdW50SWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuYWNjb3VudElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVhbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG1lYW5zLmFjY291bnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKG1lYW5zLnNlcnZpY2VQcm92aWRlcklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuc2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLW5vdGVzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/Lm5vdGVzVG9waWMpIHtcbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lm5vdGVzVG9waWMgfX08L2gyPlxuICAgIH1cbiAgICBAZm9yIChub3RlIG9mIGludm9pY2UoKS5pbnZvaWNlTm90ZXM7IHRyYWNrIG5vdGUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAobm90ZT8uc2hvcnRUZXh0KSB7XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IG5vdGU/LnNob3J0VGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG5vdGU/LmxvbmdUZXh0KSB7XG4gICAgICAgICAgPHA+e3sgbm90ZT8ubG9uZ1RleHQgfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|