@libs-ui/services-grid-layout 0.2.357-26 → 0.2.357-28

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.
@@ -108,6 +108,23 @@ export class LibsUiGridLayoutService {
108
108
  // gridster vẫn giữ options cũ — chuyển sang XEM mà khối vẫn kéo được.
109
109
  this.version.update((v) => v + 1);
110
110
  }
111
+ /**
112
+ * Đổi số hàng TỐI THIỂU của lưới cấp trang — KHÔNG dựng lại mặt phẳng.
113
+ *
114
+ * 🔴 `minRows` chỉ được đọc MỘT LẦN lúc `init()`, nên nơi dùng muốn đổi nó theo chế độ (sửa thì ô
115
+ * li phủ kín màn, xem thì đúng số hàng của bố cục) buộc phải gọi `init()` lại — mà `init()` huỷ
116
+ * sạch rồi dựng lại mọi component nội dung. Hệ quả đo được 15/09/2026: mở ở chế độ xem rồi bấm
117
+ * Sửa thì lưới đứng ở số hàng của bố cục (28 hàng = 448px) trong khi vùng nhìn cao hơn nhiều, nên
118
+ * ô li ngừng ngay dưới khối cuối và phần còn lại trống trơn không có đường kẻ nào.
119
+ */
120
+ setMinRows(value) {
121
+ if (!this.config || !Number.isFinite(value) || value <= 0) {
122
+ return;
123
+ }
124
+ this.config = { ...this.config, minRows: value };
125
+ // Bơm `version` để `gridOptions` bên canvas tính lại — cùng lý do như `setEditMode`.
126
+ this.version.update((v) => v + 1);
127
+ }
111
128
  /**
112
129
  * Bật/tắt cho khối chồng lên nhau — KHÔNG dựng lại mặt phẳng.
113
130
  *
@@ -161,6 +178,7 @@ export class LibsUiGridLayoutService {
161
178
  ...(depth > 0 && config.nestedRowHeight !== undefined ? { fixedRowHeight: config.nestedRowHeight } : {}),
162
179
  ...(depth === 0 && config.outerMargin !== undefined ? { outerMargin: config.outerMargin } : {}),
163
180
  ...(depth === 0 && config.outerMarginBottom !== undefined ? { outerMarginBottom: config.outerMarginBottom } : {}),
181
+ ...(depth === 0 && config.outerMarginTop !== undefined ? { outerMarginTop: config.outerMarginTop } : {}),
164
182
  ...(config.minItemRows !== undefined ? { minItemRows: config.minItemRows } : {}),
165
183
  ...(config.defaultItemCols !== undefined ? { defaultItemCols: config.defaultItemCols } : {}),
166
184
  ...(config.defaultItemRows !== undefined ? { defaultItemRows: config.defaultItemRows } : {}),
@@ -734,4 +752,4 @@ export class LibsUiGridLayoutService {
734
752
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiGridLayoutService, decorators: [{
735
753
  type: Injectable
736
754
  }], ctorParameters: () => [] });
737
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFpQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ2hFOzs7OztPQUtHO0lBQ2MscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFbkU7UUFDRSwrRkFBK0Y7UUFDL0YseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxNQUFNLENBQXVCO0lBQ3BCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FB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QUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdCLDZGQUE2RjtRQUM3Rix3RUFBd0U7UUFDeEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzt3R0FyMkJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLCBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnZ3JpZHN0ZXIxOCc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdyaWRMYXlvdXROZXN0ZWRDb25maWcsIGdyaWRMYXlvdXRSb290Q29uZmlnIH0gZnJvbSAnLi9kZWZpbmVzL2dyaWRzdGVyLWNvbmZpZy5kZWZpbmUnO1xuaW1wb3J0IHsgZmluZE5vZGVSZWN1cnNpdmUsIGZpbmRQYXJlbnRSZWN1cnNpdmUgfSBmcm9tICcuL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZSc7XG5pbXBvcnQgeyBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQge1xuICBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcsXG4gIFRfZ3JpZExheW91dF9jaGFuZ2VFdmVudCxcbiAgVF9ncmlkTGF5b3V0X25ld05vZGUsXG4gIFRfZ3JpZExheW91dF9jb25maWcsXG4gIFRfZ3JpZExheW91dF9ub2RlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvZ3JpZC1sYXlvdXQuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBE4buxbmcgbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjIHbDoCB04buxIGfhuq9uIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nIGzDqm4gdOG7q25nIGto4buRaS5cbiAqXG4gKiBOxqFpIGTDuW5nIGNo4buJIGPhuqduIMSRxrBhIHbDoG86IGxv4bqhaSBjb21wb25lbnQgbXXhu5FuIGThu7FuZ1xuICogKGBub2RlQ29tcG9uZW50VHlwZWApIHbDoCBjw6J5IGThu68gbGnhu4d1IChgZGF0YWApLiBUb8OgbiBi4buZIHZp4buHYyB24bq9IGzGsOG7m2ksIGvDqW8gdGjhuqMsIMSR4buVaSBrw61jaCB0aMaw4bubYyxcbiAqIGzhu5NuZyBjb250YWluZXIgdsOgIGThu41uIGThurlwIGRvIHRoxrAgdmnhu4duIGxvLlxuICpcbiAqIPCflLQgxJDDonkgbMOgIHNlcnZpY2UgdGhlbyBU4buqTkcgbeG6t3QgcGjhurNuZywgS0jDlE5HIGBwcm92aWRlZEluOiAncm9vdCdgLiBLaGFpIHRyb25nIGBwcm92aWRlcnNgIGPhu6dhXG4gKiBjb21wb25lbnQgZMO5bmcgbsOzOyBoYWkgbeG6t3QgcGjhurNuZyB0csOqbiBjw7luZyBt4buZdCBtw6BuIHBo4bqjaSBsw6AgaGFpIHRo4buxYyB0aOG7gyByacOqbmcsIGTDuW5nIGNodW5nIHRow6xcbiAqIGBjb21wb25lbnRSZWZzYCBj4bunYSBt4bq3dCBwaOG6s25nIG7DoHkgYuG7iyBt4bq3dCBwaOG6s25nIGtpYSBk4buNbiBt4bqldC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExpYnNVaUdyaWRMYXlvdXRTZXJ2aWNlIHtcbiAgLy8g8J+UtCBU4buwIFThuqBPLCBraMO0bmcgYGluamVjdGAuIE7GoWkgZMO5bmcgY2jhu4kgcGjhuqNpIHZp4bq/dCBgcHJvdmlkZXJzOiBbTGlic1VpR3JpZExheW91dFNlcnZpY2VdYCDigJRcbiAgLy8ga2jDtG5nIHBo4bqjaSBiaeG6v3QgYsOqbiB0cm9uZyB0aMawIHZp4buHbiBjw7JuIHNlcnZpY2UgbsOgbyBraMOhYyAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAvLyBgVHJlZVNlcnZpY2VgIGtow7RuZyBnaeG7ryB0cuG6oW5nIHRow6FpIGTDuW5nIGNodW5nIG7Dqm4gbeG7l2kgbeG6t3QgcGjhurNuZyBt4buZdCBi4bqjbiBsw6AgxJHDum5nLlxuICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlID0gbmV3IExpYnNVaUdyaWRMYXlvdXRUcmVlU2VydmljZSgpO1xuICAvKiogTMaw4bujdCB04bqjaSBjb21wb25lbnQgxJFhbmcgY2jhu50sIHRoZW8gaWQga2jhu5FpIOKAlCDEkeG7gyBodeG7tyBraGkga2jhu5FpIGLhu4sgZ+G7oSBnaeG7r2EgY2jhu6tuZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nTG9hZHMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uPigpO1xuICAvKipcbiAgICogQuG7mSB0aGVvIGTDtWkgYuG7gSBy4buZbmcgY+G7p2EgdOG7q25nIGzGsOG7m2kgTOG7kk5HLCDEkeG7gyBuZ+G6r3Qga2hpIHNlcnZpY2UgYuG7iyBodeG7ty5cbiAgICpcbiAgICog8J+UtCBHaeG7ryB0aGFtIGNoaeG6v3UgbMOgIELhuq5UIEJV4buYQzogYFJlc2l6ZU9ic2VydmVyYCBraMO0bmcgdOG7sSB04bqvdCB0aGVvIHbDsm5nIMSR4budaSBjb21wb25lbnQuIEtow7RuZyBk4buNblxuICAgKiB0aMOsIG3hu5dpIGzhuqduIG7huqFwIGzhuqFpIGLhu5EgY+G7pWMgKMSR4buVaSB0YWIpIGzhuqFpIGNo4buTbmcgdGjDqm0gbeG7mXQgYuG7mSwgdsOgIGNow7puZyB24bqrbiBjaOG6oXkgdHLDqm4gRE9NIMSRw6MgZ+G7oS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmVzdGVkUmVzaXplT2JzZXJ2ZXJzID0gbmV3IFNldDxSZXNpemVPYnNlcnZlcj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyDwn5S0IFNlcnZpY2Uga2hhaSB0cm9uZyBgcHJvdmlkZXJzYCBj4bunYSBjb21wb25lbnQgbsOqbiBBbmd1bGFyIGh14bu3IG7DsyBjw7luZyBjb21wb25lbnQg4oCUIHRoxrAgdmnhu4duXG4gICAgLy8gdOG7sSBk4buNbiDhu58gxJHDonksIG7GoWkgZMO5bmcgS0jDlE5HIHBo4bqjaSBn4buNaSBgZGVzdHJveSgpYCB0cm9uZyBgbmdPbkRlc3Ryb3lgIChuZ8aw4budaSBkw7luZyBjaOG7kXRcbiAgICAvLyAyOC8wOC8yMDI2KS4gQuG6r3Qgbmjhu5sgbeG7mXQgYsaw4bubYyBk4buNbiBk4bq5cCBsw6Aga2nhu4N1IEFQSSBk4buFIHF1w6puLCB2w6AgcXXDqm4gdGjDrCByw7IgcuG7iSBi4buZIG5o4bubIGltIGzhurduZy5cbiAgICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHRoaXMuZGVzdHJveSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnPzogVF9ncmlkTGF5b3V0X2NvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRSZWZzID0gbmV3IE1hcDxzdHJpbmcsIENvbXBvbmVudFJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvb3ROb2RlID0gc2lnbmFsPFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVkaXRNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIHTEg25nIG3hu5dpIGzhuqduIGPDonkgxJHhu5VpIOKAlCBjb21wb25lbnQgY29uIMSR4buNYyDEkeG7gyBiaeG6v3QgcGjhuqNpIHTDrW5oIGzhuqFpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbiA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvb21MZXZlbCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgY2jhu4kgxJHhu41jIMSR4buDIG7GoWkgZMO5bmcgdGhlbyBkw7VpLlxuICAgKlxuICAgKiDwn5S0IEzDoCBUSFXhu5hDIFTDjU5ILCBraMO0bmcgcGjhuqNpIGdldHRlci4gR2V0dGVyIHRy4bqjIHNpZ25hbCB0aMOsIGNo4buXIMSR4buNYyBwaOG6o2kgdmnhur90IGBWZXJzaW9uKCkoKWAg4oCUXG4gICAqIHF1w6puIGPhurdwIG5nb+G6t2MgdGjhu6kgaGFpIGzDoCBjb21wdXRlZCBLSMOUTkcgcGjhu6UgdGh14buZYyB2w6BvIG7DsywgY8OieSDEkeG7lWkgbcOgIGzGsOG7m2kgxJHhu6luZyBpbSwgdsOgXG4gICAqIFR5cGVTY3JpcHQga2jDtG5nIGjhu4EgYsOhbyBs4buXaSAoxJFvIDI4LzA4LzIwMjY6IHRow6ptIGto4buRaSBraMO0bmcgaGnhu4duLCBz4bqvcCBn4buNbiBraMO0bmcgbmjDumMgbmjDrWNoKS5cbiAgICovXG4gIHJlYWRvbmx5IFJvb3QgPSB0aGlzLnJvb3ROb2RlLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgSXNFZGl0TW9kZSA9IHRoaXMuZWRpdE1vZGUuYXNSZWFkb25seSgpO1xuICAvKiogdMSDbmcgbeG7l2kgbOG6p24gY8OieSBob+G6t2MgY+G6pXUgaMOsbmggxJHhu5VpICovXG4gIHJlYWRvbmx5IFZlcnNpb24gPSB0aGlzLnZlcnNpb24uYXNSZWFkb25seSgpO1xuICByZWFkb25seSBab29tID0gdGhpcy56b29tTGV2ZWwuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiB0cuG6p24gc+G7kSBj4bqlcCBjb250YWluZXIgbOG7k25nIG5oYXUg4oCUIGNhbnZhcyDEkeG7jWMgxJHhu4MgYmnhur90IGPDsyBjaG8gY2h1eeG7g24gdGjDoG5oIGNvbnRhaW5lciBraMO0bmcgKi9cbiAgcHJpdmF0ZSBtYXhDb250YWluZXJEZXB0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ubWF4Q29udGFpbmVyRGVwdGggPz8gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBs4buBIHRyb25nIGPhu6dhIGNvbnRhaW5lciwgcHgg4oCUIGNhbnZhcyDEkeG7jWMgxJHhu4MgxJHhurd0IHBhZGRpbmcgbMOqbiB24buPIGNvbnRhaW5lciAqL1xuICBwcml2YXRlIGNvbnRhaW5lclBhZGRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmNvbnRhaW5lclBhZGRpbmcgPz8gMTI7XG4gIH1cblxuICAvKiogS2jhu59pIHThuqFvIG3hurd0IHBo4bqzbmcuIEfhu41pIGzhuqFpIHPhur0gZOG7jW4gc+G6oWNoIGNvbXBvbmVudCBjxakgcuG7k2kgZOG7sW5nIGzhuqFpIHThu6sgxJHhuqd1LiAqL1xuICBpbml0KGNvbmZpZzogVF9ncmlkTGF5b3V0X2NvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIC8vIPCflLQgQuG7kSBj4bulYyDEkMODIEzGr1Uga2jDtG5nIMSRaSBxdWEgbHXhuq10IGNo4bq3biBuw6BvIGPhu6dhIGdpYW8gZGnhu4duOiBi4bqjbiBsxrB1IGPFqSAoc2luaCB0csaw4bubYyBraGkgY8OzIHRy4bqnbixcbiAgICAvLyBob+G6t2MgZG8gdGhhbyB0w6FjIGzhu5dpKSB24bqrbiBtYW5nIGNvbnRhaW5lciBs4buTbmcgY29udGFpbmVyLiBUcuG6p24gYG1heENvbnRhaW5lckRlcHRoYCBjaOG7iSDhuqluIE7DmlRcbiAgICAvLyB0csOqbiBjYW52YXMg4oCUIG7DsyBraMO0bmcgc+G7rWEgZOG7ryBsaeG7h3UsIG7Dqm4gdGhp4bq/dSBkw7JuZyBuw6B5IGzDoCB24bq9IHJhIMSRw7puZyBjw6J5IHF1w6Egc8OidSDEkcOzLlxuICAgIC8vIE7GoWkgZMO5bmcgS0jDlE5HIHThu7EgZ+G7jWkgxJHGsOG7o2M6IGBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2VgIGPhu5Egw70ga2jDtG5nIHh14bqldC5cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmZsYXR0ZW5PdmVyRGVwdGhDb250YWluZXJzKGNvbmZpZy5kYXRhLCB0aGlzLm1heENvbnRhaW5lckRlcHRoKCkpO1xuICAgIHRoaXMuYXNzaWduT3ZlcmxhcExheWVycyhjb25maWcuZGF0YSk7XG4gICAgLy8g8J+UtCBOaMOibiBi4bqjbiBuaMawIGByZWZyZXNoKClgOiBgaW5pdCgpYCBs4bqhaSAoxJHhu5VpIGNo4bq/IMSR4buZLCBi4bqtdC904bqvdCBjaOG7k25nIGto4buRaSkgdHLDqm4gQ8OZTkcgb2JqZWN0IGPDonlcbiAgICAvLyB0aMOsIGBAZm9yYCBraMO0bmcgZOG7sW5nIGzhuqFpIGBncmlkc3Rlci1pdGVtYCwgbsOqbiBgbGF5ZXJJbmRleGAgduG7q2EgZ8OhbiBraMO0bmcgdOG7m2kgYCRpdGVtYCB2w6Aga2jhu5FpXG4gICAgLy8gduG6q24ga2jDtG5nIMSRw6ggbmhhdSDEkcaw4bujYyAoxJFvIDI4LzA4LzIwMjY6IGBpdGVtLmxheWVySW5kZXhgID0gMXwyfDN8NHw3IG3DoCBgJGl0ZW0ubGF5ZXJJbmRleGBcbiAgICAvLyB0b8OgbiBgdW5kZWZpbmVkYCkuXG4gICAgdGhpcy5yb290Tm9kZS5zZXQodGhpcy5zaGFsbG93Q2xvbmVUcmVlKGNvbmZpZy5kYXRhKSk7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQoY29uZmlnLmlzRWRpdE1vZGUgPz8gZmFsc2UpO1xuXG4gICAgbGV0IGluaXRpYWxab29tID0gY29uZmlnLmluaXRpYWxab29tID8/IDE7XG4gICAgaWYgKGNvbmZpZy5zdG9yYWdlS2V5ICYmIHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGNvbmZpZy5zdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNhdmVkKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdChzYXZlZCk7XG4gICAgICAgICAgY29uc3QgbWluID0gY29uZmlnLnpvb21NaW4gPz8gMC40O1xuICAgICAgICAgIGNvbnN0IG1heCA9IGNvbmZpZy56b29tTWF4ID8/IDEuNTtcbiAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID49IG1pbiAmJiBwYXJzZWQgPD0gbWF4KSB7XG4gICAgICAgICAgICBpbml0aWFsWm9vbSA9IHBhcnNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgbG9jYWxTdG9yYWdlIGFjY2VzcyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnpvb21MZXZlbC5zZXQoaW5pdGlhbFpvb20pO1xuXG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgc2V0RWRpdE1vZGUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRNb2RlLnNldCh2YWx1ZSk7XG4gICAgLy8g8J+UtCBQSOG6okkgYsahbSBgdmVyc2lvbmA6IGBncmlkc3Rlck9wdGlvbnMoKWAgxJHhu41jIGBlZGl0TW9kZWAgxJHhu4MgYuG6rXQvdOG6r3Qga8Opb+KAk3Ro4bqjLCBtw6AgY29tcHV0ZWRcbiAgICAvLyBgZ3JpZE9wdGlvbnNgIGLDqm4gY2FudmFzIGNo4buJIGNo4bqheSBs4bqhaSBraGkgYFZlcnNpb25gIMSR4buVaS4gVGhp4bq/dSBkw7JuZyBuw6B5IHRow6wgxJHhu5VpIGNo4bq/IMSR4buZIHhvbmdcbiAgICAvLyBncmlkc3RlciB24bqrbiBnaeG7ryBvcHRpb25zIGPFqSDigJQgY2h1eeG7g24gc2FuZyBYRU0gbcOgIGto4buRaSB24bqrbiBrw6lvIMSRxrDhu6NjLlxuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4bqtdC904bqvdCBjaG8ga2jhu5FpIGNo4buTbmcgbMOqbiBuaGF1IOKAlCBLSMOUTkcgZOG7sW5nIGzhuqFpIG3hurd0IHBo4bqzbmcuXG4gICAqXG4gICAqIFRyxrDhu5tjIMSRw6J5IG7GoWkgZMO5bmcgcGjhuqNpIGfhu41pIGBpbml0KClgIGzhuqFpIMSR4buDIMSR4buVaSBj4budIG7DoHksIG3DoCBgaW5pdCgpYCBodeG7tyBz4bqhY2ggcuG7k2kgZOG7sW5nIGzhuqFpIG3hu41pXG4gICAqIGNvbXBvbmVudCBu4buZaSBkdW5nIOKAlCBsw6NuZyBwaMOtLCB2w6AgbmfGsOG7nWkgZMO5bmcgdGjhuqV5IG3DoG4gY2jhu5twIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gICAqL1xuICBzZXRBbGxvd092ZXJsYXAodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCBhbGxvd092ZXJsYXA6IHZhbHVlIH07XG5cbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g8J+UtCBHw6FuIGzhu5twIHbDoG8gQ8OCWSDEkEFORyBW4bq8IChgcm9vdE5vZGVgKSwgS0jDlE5HIHBo4bqjaSBgY29uZmlnLmRhdGFgLlxuICAgIC8vIGBpbml0KClgIMSRw6MgY2xvbmUgYGNvbmZpZy5kYXRhYCBzYW5nIGByb290Tm9kZWAgbsOqbiBoYWkgb2JqZWN0IEtIw4FDIG5oYXU7IGfDoW4gdsOgbyBgY29uZmlnLmRhdGFgXG4gICAgLy8gdGjDrCBgcmVmcmVzaCgpYCBjbG9uZSBs4bqhaSB04burIGByb290Tm9kZWAg4oCUIGzhu5twIHbhu6thIGfDoW4ga2jDtG5nIHThu5tpIGBncmlkc3Rlci1pdGVtYCBuw6BvLCBgei1pbmRleGBcbiAgICAvLyBj4bunYSBt4buNaSBraOG7kWkgxJHhu6luZyDhu58gYDFgIHbDoCBraOG7kWkgbsOgbyB24bq9IHNhdSB0aMOsIG7hurFtIHRyw6puOiBjaOG7k25nIGto4buRaSBcImzDumMgxJHGsOG7o2MgbMO6YyBraMO0bmdcIlxuICAgIC8vICjEkW8gMDQvMDkvMjAyNjogYGl0ZW0ubGF5ZXJJbmRleGAgdW5kZWZpbmVkLCBgZ2V0TGF5ZXJJbmRleCgpYCA9IDAgY2hvIGPhuqMgOCBraOG7kWkpLlxuICAgIHRoaXMuYXNzaWduT3ZlcmxhcExheWVycyhyb290KTtcbiAgICAvLyBUaGF5IHRoYW0gY2hp4bq/dSBjw6J5IMSR4buDIGBsYXllckluZGV4YCB24burYSBnw6FuIHThu5tpIMSRxrDhu6NjIGAkaXRlbWAgY+G7p2EgZ3JpZHN0ZXI7IGNvbXBvbmVudCBu4buZaSBkdW5nXG4gICAgLy8gS0jDlE5HIGLhu4sgZOG7sW5nIGzhuqFpIHbDrCBgYXR0YWNoTm9kZWAgbmjhuq1uIHJhIGlkIGPFqSB2w6AgY2jhu4kgYHNldElucHV0YC5cbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBD4bqldSBow6xuaCBncmlkc3RlciBjaG8gbeG7mXQgY+G6pXAgbMaw4bubaS5cbiAgICpcbiAgICogQHBhcmFtIGRlcHRoIDAgPSBsxrDhu5tpIGPhuqVwIHRyYW5nLCDiiaUgMSA9IGzGsOG7m2kgbOG7k25nIHRyb25nIGNvbnRhaW5lclxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEdyaWRzdGVyT3B0aW9ucyhkZXB0aDogbnVtYmVyLCBpdGVtQ2hhbmdlQ2FsbGJhY2s/OiAoKSA9PiB2b2lkKTogR3JpZHN0ZXJDb25maWcge1xuICAgIGNvbnN0IGJhc2UgPSBkZXB0aCA9PT0gMCA/IGdyaWRMYXlvdXRSb290Q29uZmlnKCkgOiBncmlkTGF5b3V0TmVzdGVkQ29uZmlnKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGcmVlTW9kZSA9IGNvbmZpZy5tb2RlID09PSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcuZnJlZTtcbiAgICBjb25zdCBjYW5FZGl0ID0gdGhpcy5lZGl0TW9kZSgpO1xuICAgIGNvbnN0IGNhbk92ZXJsYXAgPSBpc0ZyZWVNb2RlIHx8IChjb25maWcuYWxsb3dPdmVybGFwID8/IGZhbHNlKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgc2NhbGU6IHRoaXMuem9vbUxldmVsKCksXG4gICAgICAuLi4oY29uZmlnLmNvbHMgPyB7IG1pbkNvbHM6IGNvbmZpZy5jb2xzLCBtYXhDb2xzOiBjb25maWcuY29scywgbWF4SXRlbUNvbHM6IGNvbmZpZy5jb2xzIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLnJvd0hlaWdodCAmJiBkZXB0aCA9PT0gMCA/IHsgZml4ZWRSb3dIZWlnaHQ6IGNvbmZpZy5yb3dIZWlnaHQgfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcubWluUm93cyAhPT0gdW5kZWZpbmVkID8geyBtaW5Sb3dzOiBjb25maWcubWluUm93cyB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID4gMCAmJiBjb25maWcubmVzdGVkTWluUm93cyAhPT0gdW5kZWZpbmVkID8geyBtaW5Sb3dzOiBjb25maWcubmVzdGVkTWluUm93cyB9IDoge30pLFxuICAgICAgLy8gS2hlIHbDoCBjaGnhu4F1IGNhbyBow6BuZyBraMOhYyBuaGF1IHRoZW8gY+G6pXA6IGzGsOG7m2kgdHJhbmcgdGhvw6FuZywgbMaw4bubaSBs4buTbmcga2jDrXQuXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm1hcmdpbiAhPT0gdW5kZWZpbmVkID8geyBtYXJnaW46IGNvbmZpZy5tYXJnaW4gfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA+IDAgJiYgY29uZmlnLm5lc3RlZE1hcmdpbiAhPT0gdW5kZWZpbmVkID8geyBtYXJnaW46IGNvbmZpZy5uZXN0ZWRNYXJnaW4gfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA+IDAgJiYgY29uZmlnLm5lc3RlZFJvd0hlaWdodCAhPT0gdW5kZWZpbmVkID8geyBmaXhlZFJvd0hlaWdodDogY29uZmlnLm5lc3RlZFJvd0hlaWdodCB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5vdXRlck1hcmdpbiAhPT0gdW5kZWZpbmVkID8geyBvdXRlck1hcmdpbjogY29uZmlnLm91dGVyTWFyZ2luIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm91dGVyTWFyZ2luQm90dG9tICE9PSB1bmRlZmluZWQgPyB7IG91dGVyTWFyZ2luQm90dG9tOiBjb25maWcub3V0ZXJNYXJnaW5Cb3R0b20gfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcubWluSXRlbVJvd3MgIT09IHVuZGVmaW5lZCA/IHsgbWluSXRlbVJvd3M6IGNvbmZpZy5taW5JdGVtUm93cyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SXRlbUNvbHMgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdEl0ZW1Db2xzOiBjb25maWcuZGVmYXVsdEl0ZW1Db2xzIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLmRlZmF1bHRJdGVtUm93cyAhPT0gdW5kZWZpbmVkID8geyBkZWZhdWx0SXRlbVJvd3M6IGNvbmZpZy5kZWZhdWx0SXRlbVJvd3MgfSA6IHt9KSxcblxuICAgICAgLy8g8J+UtCBDaOG6vyDEkeG7mSBYRU0gcGjhuqNpIFThuq5UIGjhurNuIGvDqW8gdsOgIMSR4buVaSBrw61jaCB0aMaw4bubYy5cbiAgICAgIC8vIGBiYXNlYCBsdcO0biDEkeG7gyBgZW5hYmxlZDogdHJ1ZWA7IGtow7RuZyBnaGkgxJHDqCB0aGVvIGBlZGl0TW9kZWAgdGjDrCBuZ8aw4budaSB4ZW0gduG6q24ga8OpbyDEkcaw4bujYyBraOG7kWlcbiAgICAgIC8vIHbDoCDEkeG7lWkgYuG7kSBj4bulYyBj4bunYSBuZ8aw4budaSBraMOhYyAobmfGsOG7nWkgZMO5bmcgYsOhbyAyOC8wOC8yMDI2OiBcIsSRYW5nIHhlbSBtw6AgduG6q24ga8OpbyB0aOG6oyB0aGF5IMSR4buVaVxuICAgICAgLy8gduG7iyB0csOtIHbDoCB0aMOqbSBraOG7kWkgxJHGsOG7o2NcIikuXG4gICAgICBkcmFnZ2FibGU6IHsgLi4uYmFzZS5kcmFnZ2FibGUsIGVuYWJsZWQ6IGNhbkVkaXQgfSxcbiAgICAgIHJlc2l6YWJsZTogeyAuLi5iYXNlLnJlc2l6YWJsZSwgZW5hYmxlZDogY2FuRWRpdCB9LFxuXG4gICAgICAvLyBDaOG6vyDEkeG7mSB04buxIGRvIExVw5ROIGNobyBjaOG7k25nOyBjaOG6vyDEkeG7mSBsxrDhu5tpIHRow6wgdGhlbyBj4budIGPhu6dhIG7GoWkgZMO5bmcuXG4gICAgICBhbGxvd011bHRpTGF5ZXI6IGNhbk92ZXJsYXAsXG4gICAgICAvLyDwn5S0IELhuq10IGBhbGxvd011bHRpTGF5ZXJgIE3hu5hUIE3DjE5IIGtow7RuZyDEkeG7py4gTcOjIGxpYiBzbyBgbGF5ZXJJbmRleGAgY+G7p2EgaGFpIGto4buRaTogS0jDgUMgbmhhdVxuICAgICAgLy8gdGjDrCBjaG8gxJHDqCwgR0nhu5BORyBuaGF1IHbhuqtuIGLDoW8gdmEgY2jhuqFtLiBLaOG7kWkga2jDtG5nIGtoYWkgYGxheWVySW5kZXhgIMSR4buBdSByxqFpIHbhu4FcbiAgICAgIC8vIGBkZWZhdWx0TGF5ZXJJbmRleGAg4oCUIHThu6ljIGPDuW5nIGzhu5twLCB2w6AgduG6q24gYuG7iyDEkeG6qXkgbmhhdSBuaMawIGzGsOG7m2kgdGjGsOG7nW5nIChuZ8aw4budaSBkw7luZyBiw6FvXG4gICAgICAvLyAyOC8wOC8yMDI2OiBcImLhuq10IGNo4buTbmcga2jhu5FpIG5oxrBuZyBraGkga8OpbyB0aMOsIGPDoWMga2jhu5FpIHbhuqtuIGRpIGNodXnhu4NuIHRoZW9cIikuXG4gICAgICAvLyBDaG8gY2jhu5NuZyB0aMOsIHBo4bqjaSBU4bquVCDEkeG6qXkga2jhu5FpLCBu4bq/dSBraMO0bmcga2jhu5FpIGLhu4sgZOG6oXQgxJFpIHRyxrDhu5tjIGtoaSBr4buLcCDEkcOoIGzDqm4gbmhhdS5cbiAgICAgIC4uLihjYW5PdmVybGFwID8geyBwdXNoSXRlbXM6IGZhbHNlLCBwdXNoUmVzaXplSXRlbXM6IGZhbHNlLCBzd2FwOiBmYWxzZSwgc3dhcFdoaWxlRHJhZ2dpbmc6IGZhbHNlIH0gOiB7fSksXG5cbiAgICAgIC4uLnRoaXMuYnVpbGROZXN0ZWRSZXNpemVIb29rcyhiYXNlLCBkZXB0aCksXG5cbiAgICAgIGl0ZW1DaGFuZ2VDYWxsYmFjazogKGl0ZW06IEdyaWRzdGVySXRlbSkgPT4ge1xuICAgICAgICAvLyDwn5S0IEto4buRaSB24burYSB0aGFvIHTDoWMgcGjhuqNpIGzDqm4gTOG7mlAgVFLDik4gQ8OZTkcuXG4gICAgICAgIC8vIGBsYXllckluZGV4YCBnw6FuIG3hu5l0IGzhuqduIHRoZW8gdGjhu6kgdOG7sSBjw6J5IGzDumMga2jhu59pIHThuqFvLCBuw6puIGto4buRaSBrw6lvIGzDqm4gY2jhu4kgbuG7lWkgVFJPTkcgTMOaQ1xuICAgICAgICAvLyBrw6lvIChuaOG7nSBgei1pbmRleDogMzBgIGPhu6dhIGzhu5twIGBncmlkc3Rlci1pdGVtLW1vdmluZ2ApOyB0aOG6oyB0YXkgcmEgbMOgIHbhu4EgbOG7m3AgY8WpIHbDoCBi4buLIGto4buRaVxuICAgICAgICAvLyDEkeG7qW5nIHNhdSB0cm9uZyBjw6J5IMSRw6ggbmfGsOG7o2MgbMOqbiAobmfGsOG7nWkgZMO5bmcgYsOhbyAyOC8wOC8yMDI2LCDEkW8gxJHGsOG7o2M6IGvDqW8gej0zMCwgdGjhuqMgduG7gVxuICAgICAgICAvLyB6PTEwIHRyb25nIGtoaSBoYWkga2jhu5FpIGvhur8gYsOqbiDEkWFuZyB6PTExIHbDoCB6PTEyKS5cbiAgICAgICAgaWYgKGNhbk92ZXJsYXApIHtcbiAgICAgICAgICB0aGlzLnJhaXNlVG9Ub3BMYXllcihpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgICAgICAgaXRlbUNoYW5nZUNhbGxiYWNrPy4oKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4bqvdCBsxrDhu5tpIEzhu5JORyDEkW8gbOG6oWkgTkdBWSBraGkga2h1bmcgY2jhu6lhIG7DsyDEkeG7lWkgYuG7gSBy4buZbmcg4oCUIGTDuW5nIGzDumMgbmfGsOG7nWkgZMO5bmcga8OpbyBtw6lwIGto4buRaSBjaGEuXG4gICAqXG4gICAqIEdyaWRzdGVyIGPDsyBz4bq1biDEkcaw4budbmcgdOG7sSDEkW8gKGByZXNpemUkYCksIG5oxrBuZyBsdeG7k25nIMSRw7MgbMOgIGBzd2l0Y2hNYXAoKCkgPT4gdGltZXIoMTAwKSlgOiBt4buXaVxuICAgKiBs4bqnbiBwaMOhdCBs4bqhaSBodeG7tyB0aW1lciB0csaw4bubYywgbcOgIGvDqW8gY2h14buZdCBi4bqvbiBkw6B5IGjGoW4gMTAwbXMgbsOqbiB0aW1lciBraMO0bmcgYmFvIGdp4budIHThu5tpIMSRw61jaC5cbiAgICogxJBvIMSRxrDhu6NjICgxMS8wOS8yMDI2KToga8OpbyBtw6lwIG5ow7NtIHRow6wgbMaw4bubaSBjb24gY28gdGhlbyBjaGEgdOG7q25nIGtodW5nIGjDrG5oICgyMzQg4oaSIDM4NCBweCkgY8OyblxuICAgKiBUSOG6uiBjb24gxJHhu6luZyBpbSDhu58gMTA2IHB4IHN14buRdCBjw7oga8OpbywgY2jhu4kgbmjhuqN5IMSRw7puZyBzYXUga2hpIHRo4bqjIHRheS5cbiAgICpcbiAgICogR2nhu68gQ+G6oiBIQUkgxJHGsOG7nW5nOiBgaXRlbVJlc2l6ZUNhbGxiYWNrYCBi4bqvbiDEkeG7k25nIGLhu5kgbmdheSBraGkgZ3JpZHN0ZXIgZ2hpIGLhu4EgcuG7mW5nIG3hu5tpIGzDqm4ga2jhu5FpXG4gICAqIChz4bubbSBoxqFuIGBSZXNpemVPYnNlcnZlcmAgbeG7mXQga2h1bmcgaMOsbmgpIGxvIMSR4buZIHThu6ljIHRow6w7IGBSZXNpemVPYnNlcnZlcmAgbG8gbmjhu69uZyBs4bqnbiBraHVuZyDEkeG7lWlcbiAgICogdsOsIGzDvSBkbyBraMOhYyDigJQgxJHhu5VpIHpvb20sIHRodSBn4buNbiBj4buZdCBiw6puIHRyw6FpLlxuICAgKlxuICAgKiBU4bqvdCBi4bqxbmcgYGNvbmZpZy5hdXRvUmVzaXplTmVzdGVkR3JpZHM6IGZhbHNlYC5cbiAgICovXG4gIHByaXZhdGUgYnVpbGROZXN0ZWRSZXNpemVIb29rcyhiYXNlOiBHcmlkc3RlckNvbmZpZywgZGVwdGg6IG51bWJlcik6IFBhcnRpYWw8R3JpZHN0ZXJDb25maWc+IHtcbiAgICBpZiAodGhpcy5jb25maWc/LmF1dG9SZXNpemVOZXN0ZWRHcmlkcyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgZ29jSXRlbVJlc2l6ZSA9IGJhc2UuaXRlbVJlc2l6ZUNhbGxiYWNrO1xuICAgIGNvbnN0IGdvY0luaXQgPSBiYXNlLmluaXRDYWxsYmFjaztcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtUmVzaXplQ2FsbGJhY2s6IChpdGVtLCBpdGVtQ29tcG9uZW50KSA9PiB7XG4gICAgICAgIGdvY0l0ZW1SZXNpemU/LihpdGVtLCBpdGVtQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZWwgPSAoaXRlbUNvbXBvbmVudCBhcyB7IGVsPzogSFRNTEVsZW1lbnQgfSB8IHVuZGVmaW5lZCk/LmVsO1xuXG4gICAgICAgIGVsPy5xdWVyeVNlbGVjdG9yQWxsKCdncmlkc3RlcicpLmZvckVhY2goKG5lc3RlZCkgPT4gdGhpcy5yZXNpemVHcmlkc3RlckVsZW1lbnQobmVzdGVkIGFzIEhUTUxFbGVtZW50KSk7XG4gICAgICB9LFxuICAgICAgLi4uKGRlcHRoID4gMFxuICAgICAgICA/IHsgaW5pdENhbGxiYWNrOiAoZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlKSA9PiB0aGlzLnJlZ2lzdGVyTmVzdGVkR3JpZChncmlkc3RlciwgZ29jSW5pdCkgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEfhu41pIGByZXNpemUoKWAgY+G7p2EgbeG7mXQgdGjhursgYDxncmlkc3Rlcj5gIHF1YSBjaMOtbmggaW5zdGFuY2UgbcOgIG7DsyB04buxIGfhuq9uIGzDqm4gcGjhuqduIHThu60uICovXG4gIHByaXZhdGUgcmVzaXplR3JpZHN0ZXJFbGVtZW50KG5lc3RlZDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBnaXVJbnN0YW5jZSA9IG5lc3RlZCBhcyB1bmtub3duIGFzIHsgX19ncmlkc3Rlckluc3RhbmNlPzogeyBvcHRpb25zPzogeyBhcGk/OiB7IHJlc2l6ZT86ICgpID0+IHZvaWQgfSB9IH0gfTtcblxuICAgIGdpdUluc3RhbmNlLl9fZ3JpZHN0ZXJJbnN0YW5jZT8ub3B0aW9ucz8uYXBpPy5yZXNpemU/LigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEfhuq9uIGluc3RhbmNlIGzDqm4gY2jDrW5oIHBo4bqnbiB04butIGA8Z3JpZHN0ZXI+YCBy4buTaSB0aGVvIGTDtWkgYuG7gSBy4buZbmcgY+G7p2EgbsOzLlxuICAgKlxuICAgKiBQaOG6o2kgZ+G6r24gbmfGsOG7o2MgbMOqbiBET00gdsOsIGBpdGVtUmVzaXplQ2FsbGJhY2tgIGPhu6dhIGto4buRaSBDSEEgY2jhu4kgY+G6p20gxJHGsOG7o2MgYEhUTUxFbGVtZW50YCwga2jDtG5nIGPDs1xuICAgKiDEkcaw4budbmcgbsOgbyBraMOhYyDEkWkgdOG7qyDEkcOzIHbhu4EgaW5zdGFuY2UgY+G7p2EgbMaw4bubaSBs4buTbmcgYsOqbiB0cm9uZy5cbiAgICovXG4gIHByaXZhdGUgcmVnaXN0ZXJOZXN0ZWRHcmlkKFxuICAgIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSxcbiAgICBnb2M/OiAoZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGdvYz8uKGdyaWRzdGVyKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdyaWRzdGVyIGFzIHVua25vd24gYXMgeyBlbD86IEhUTUxFbGVtZW50OyBvcHRpb25zPzogeyBhcGk/OiB7IHJlc2l6ZT86ICgpID0+IHZvaWQgfSB9IH0gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZWwgPSBpbnN0YW5jZT8uZWw7XG5cbiAgICBpZiAoIWVsIHx8IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKGVsIGFzIHVua25vd24gYXMgeyBfX2dyaWRzdGVySW5zdGFuY2U/OiB1bmtub3duIH0pLl9fZ3JpZHN0ZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xuXG4gICAgY29uc3QgdGhlb0RvaSA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiBpbnN0YW5jZT8ub3B0aW9ucz8uYXBpPy5yZXNpemU/LigpKTtcblxuICAgIHRoZW9Eb2kub2JzZXJ2ZShlbCk7XG4gICAgdGhpcy5uZXN0ZWRSZXNpemVPYnNlcnZlcnMuYWRkKHRoZW9Eb2kpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEfhuq9uIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nIGzDqm4gbeG7mXQga2jhu5FpLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCBjaOG7lyBn4bqvbiBSScOKTkcgY+G7p2Egw7QgxJHDsyDigJQgbeG7l2kga2jhu5FpIG3hu5l0IGBWaWV3Q29udGFpbmVyUmVmYCwgZMO5bmcgY2h1bmcgbeG7mXQgY8OhaSB0aMOsXG4gICAqICAgbeG7jWkgY29tcG9uZW50IGLhu4sgZOG7k24gaOG6v3QgdsOgbyBt4buZdCDDtC5cbiAgICogQHBhcmFtIGNoaWxkQ2FudmFzIGtodcO0biBt4bq3dCBwaOG6s25nIEzhu5JORyBj4bunYSBraOG7kWksIGNo4buJIGPDsyB24bubaSBraOG7kWkgY29udGFpbmVyIHThu7Ega2hhaVxuICAgKiAgIGBnZXRDb21wb25lbnRPdXRsZXRgLiBDb21wb25lbnQgduG7jyBuaOG6rW4gbsOzIHF1YSBpbnB1dCBgY2hpbGRDYW52YXNgIHbDoCB04buxIMSR4bq3dCB2w6BvIGdp4buvYSB0acOqdSDEkeG7gVxuICAgKiAgIHbhu5tpIHBo4bqnbiB0aMOibiBj4bunYSBtw6xuaC4gS2jDtG5nIHRydXnhu4FuIHh14buRbmcgdGjDrCB24buPIGNoaeG6v20gdHLhu41uIGNoaeG7gXUgY2FvIGto4buRaSB2w6AgxJHhuql5IHRvw6BuIGLhu5kgdGjhurtcbiAgICogICBjb24gcmEgbmdvw6BpIHbDuW5nIG5ow6xuIHRo4bqleS5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoTm9kZShcbiAgICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgICBkZXB0aDogbnVtYmVyLFxuICAgIGhvc3Q6IFZpZXdDb250YWluZXJSZWYsXG4gICAgY2hpbGRDYW52YXM/OiBUZW1wbGF0ZVJlZjx1bmtub3duPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGUuaWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKGV4aXN0aW5nLCBub2RlLCBkZXB0aCwgY2hpbGRDYW52YXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gS2jhu5FpIHThu7Ega2hhaSB0aMOsIGjhu49pIG7Dszsga2jDtG5nIHRow6wgaOG7j2kgaMOgbSBwaMOibiBnaeG6o2kgY2h1bmcuIEPhuqMgaGFpIMSR4buBdSBuaOG6rW4gYG5vZGVgIMSR4buDIMSR4buNY1xuICAgIC8vIMSRxrDhu6NjIGBkYXRhLnR5cGVgIG3DoCBxdXnhur90IMSR4buLbmggdHLhuqMgY29tcG9uZW50IG7DoG8uXG4gICAgY29uc3Qgc3RyZWFtID0gKG5vZGUuZ2V0Q29tcG9uZW50T3V0bGV0ID8/IGNvbmZpZy5nZXRDb21wb25lbnRPdXRsZXQpPy4obm9kZSk7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIPCflLQgSHXhu7cgbMaw4bujdCB04bqjaSBDxaggY+G7p2EgxJHDum5nIGto4buRaSBuw6B5IHRyxrDhu5tjIGtoaSBt4bufIGzGsOG7o3QgbeG7m2kuXG4gICAgLy8gS2jhu5FpIGLhu4sgZ+G7oSBy4buTaSBn4bqvbiBs4bqhaSAoxJHhu5VpIGLhu5EgY+G7pWMsIHPhuq9wIGfhu41uKSB0cm9uZyBsw7pjIGBpbXBvcnQoKWAgY2jGsGEgeG9uZyB0aMOsIGzGsOG7o3QgY8WpIHbhuqtuXG4gICAgLy8gY2jhuqF5IHRp4bq/cCB2w6AgZOG7sW5nIGNvbXBvbmVudCB2w6BvIG3hu5l0IGBWaWV3Q29udGFpbmVyUmVmYCDEkcOjIGNo4bq/dC5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5nZXQobm9kZS5pZCk/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBzdWIgPSBzdHJlYW0ucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGNvbXBvbmVudFR5cGUpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ0xvYWRzLmRlbGV0ZShub2RlLmlkKTtcblxuICAgICAgLy8gS2jhu5FpIGPDsyB0aOG7gyDEkcOjIGLhu4sgeG/DoSB0cm9uZyBsw7pjIGNo4budIHThuqNpIOKAlCBk4buxbmcgdsOgbyDEkcOieSBsw6AgcsOyIHLhu4kuXG4gICAgICBpZiAoIXRoaXMudHJlZVNlcnZpY2UuZmluZEJ5SWQodGhpcy5yb290Tm9kZSgpID8/IG5vZGUsIG5vZGUuaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVmID0gaG9zdC5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG5cbiAgICAgIHRoaXMuYXBwbHlJbnB1dHMocmVmLCBub2RlLCBkZXB0aCwgY2hpbGRDYW52YXMpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWZzLnNldChub2RlLmlkLCByZWYpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuc2V0KG5vZGUuaWQsIHN1Yik7XG4gIH1cblxuICAvKipcbiAgICogR+G7oSBjb21wb25lbnQgY+G7p2EgbeG7mXQga2jhu5FpIHbDoCBodeG7tyBuw7MuICovXG4gIHByaXZhdGUgZGV0YWNoTm9kZShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEto4buRaSBi4buLIGfhu6Ega2hpIGNvbXBvbmVudCBj4bunYSBuw7MgY8OybiDEkWFuZyB04bqjaSDigJQgcGjhuqNpIGh14bu3IGzGsOG7o3QgdOG6o2ksIGtow7RuZyB0aMOsIG7DsyBk4buxbmcgdsOgbyBt4buZdFxuICAgIC8vIGBWaWV3Q29udGFpbmVyUmVmYCDEkcOjIGNo4bq/dC5cbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5nZXQobm9kZUlkKT8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBlbmRpbmdMb2Fkcy5kZWxldGUobm9kZUlkKTtcblxuICAgIGNvbnN0IHJlZiA9IHRoaXMuY29tcG9uZW50UmVmcy5nZXQobm9kZUlkKTtcblxuICAgIGlmICghcmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVmLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZGVsZXRlKG5vZGVJZCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5wZW5kaW5nTG9hZHMudmFsdWVzKCkpIHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMuY29tcG9uZW50UmVmcy52YWx1ZXMoKSkge1xuICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9ic2VydmVyIG9mIHRoaXMubmVzdGVkUmVzaXplT2JzZXJ2ZXJzKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuY2xlYXIoKTtcbiAgICB0aGlzLm5lc3RlZFJlc2l6ZU9ic2VydmVycy5jbGVhcigpO1xuICAgIHRoaXMuY29uZmlnID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIE5ow7NtIGjDoG0gY2hvIG7GoWkgZMO5bmcgQ0jhu6YgxJDhu5hORyBn4buNaSDigJQga2jDtG5nIHBo4bqjaSBjaOG7nSBuZ8aw4budaSBkw7luZyBi4bqlbSBuw7p0IHRyw6puIGto4buRaS5cbiAgLy8gU+G7rWEgY8OieSB0aMOsIGTDuW5nIHRo4bqzbmcgYFRyZWVTZXJ2aWNlYCBy4buTaSBn4buNaSBgcmVmcmVzaCgpYCDigJQgeGVtIGRlbW8gdHJvbmcgY29yZS11aS5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIELDoW8gY2hvIHNlcnZpY2UgYmnhur90IGPDonkgduG7q2EgxJHhu5VpIHThu6sgYsOqbiBuZ2/DoGkgKHRow6ptL3hvw6Ega2jhu5FpLCBz4bqvcCBn4buNbiwgbuG6oXAgYuG7kSBj4bulYyBraMOhYykuXG4gICAqXG4gICAqIPCflLQgUEjhuqJJIHRoYXkgVEhBTSBDSEnhur5VIGPhu6dhIG5vZGUgZ+G7kWMsIGtow7RuZyBjaOG7iSBixqFtIGB2ZXJzaW9uYC5cbiAgICogYEBmb3Ig4oCmIHRyYWNrIGl0ZW0uaWRgIGdp4buvIG5ndXnDqm4gb2JqZWN0IGtoaSBpZCBraMO0bmcgxJHhu5VpLCBuw6puIGA8Z3JpZHN0ZXItaXRlbSBbaXRlbV09XCLigKZcIj5gIHbhuqtuXG4gICAqIG5o4bqtbiDEkcO6bmcgb2JqZWN0IGPFqSB2w6AgZ3JpZHN0ZXIga2jDtG5nIGjhu4EgYmnhur90IGB4L3kvY29scy9yb3dzL2xheWVySW5kZXhgIHbhu6thIGLhu4sgc+G7rWEuIELGoW0gbeG7l2lcbiAgICogYHZlcnNpb25gIHRow6wgY29tcHV0ZWQgY2jhuqF5IGzhuqFpIG5oxrBuZyB0cuG6oyB24buBIEPDmU5HIG3huqNuZyBjxakg4oCUIGzGsOG7m2kgxJHhu6luZyBpbSAoxJFvIDI4LzA4LzIwMjY6IGLhuqVtXG4gICAqIFwiU+G6r3AgZ+G7jW5cIiBjw6J5IMSRw6MgZOG7k24ga2jDrXQgbcOgIG3DoG4gaMOsbmgga2jDtG5nIG5ow7pjIG5ow61jaDsgYuG6rXQgY2jhu5NuZyBraOG7kWkgbcOgIGAkaXRlbS5sYXllckluZGV4YFxuICAgKiB24bqrbiB0cuG7kW5nKS5cbiAgICpcbiAgICogTmjDom4gYuG6o24gTsOUTkcgY+G6oyBub2RlIGfhu5FjIHbDoCBkYW5oIHPDoWNoIGNvbiBsw6AgxJHhu6c6IG3huqNuZyBt4bubaSDihpIgYEBmb3JgIGThu7FuZyBs4bqhaSBpdGVtLCBvYmplY3QgY29uXG4gICAqIG3hu5tpIOKGkiBncmlkc3RlciDEkeG7jWMgbOG6oWkgdG/DoG4gYuG7mSB0b+G6oSDEkeG7mS5cbiAgICovXG4gIHJlZnJlc2goZXZlbnQ/OiBUX2dyaWRMYXlvdXRfY2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gZXZlbnQ/LnJvb3QgPz8gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgZGF0YTogcm9vdCB9O1xuICAgIH1cblxuICAgIHRoaXMucm9vdE5vZGUuc2V0KHRoaXMuc2hhbGxvd0Nsb25lVHJlZShyb290KSk7XG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqIE5ow6JuIGLhuqNuIG7DtG5nIHRoZW8gY+G6oyBjaGnhu4F1IHPDonU6IG3hu5dpIG5vZGUgdsOgIG3huqNuZyBgY2hpbGRyZW5gIHRow6BuaCB0aGFtIGNoaeG6v3UgbeG7m2kuICovXG4gIC8qKlxuICAgKiBOaMOibiBi4bqjbiBTw4JVIGPhuqMgY8OieSDigJQgZMO5bmcgY2hvIGBleHBvcnRMYXlvdXQoKWAuXG4gICAqXG4gICAqIPCflLQgQuG7jiBgZ2V0Q29tcG9uZW50T3V0bGV0YCBraOG7j2kgYuG6o24gc2FvOiBuw7MgbMOgIG3hu5l0IEjDgE0sIGtow7RuZyB0deG6p24gdOG7sSBob8OhIMSRxrDhu6NjIG7Dqm4gZ+G7rWkgeHXhu5FuZ1xuICAgKiBiYWNrZW5kIGzDoCBo4buPbmcgKGBKU09OLnN0cmluZ2lmeWAgbnXhu5F0IG3huqV0LCBgc3RydWN0dXJlZENsb25lYCBuw6ltIGzhu5dpKS4gTuG6oXAgbOG6oWkgdGjDrCBow6BtIHBow6JuXG4gICAqIGdp4bqjaSBjaHVuZyBj4bunYSBj4bqldSBow6xuaCBsbyDigJQgY29tcG9uZW50IHN1eSByYSB04burIGBkYXRhLnR5cGVgLCBraMO0bmcgY+G6p24gbMawdS5cbiAgICovXG4gIHByaXZhdGUgZGVlcENsb25lVHJlZShub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHtcbiAgICBjb25zdCBjb3B5OiBUX2dyaWRMYXlvdXRfbm9kZSA9IHsgLi4ubm9kZSB9O1xuXG4gICAgLy8gQ+G6r3QgaMOgbSBwaMOibiBnaeG6o2kg4oCUIHhlbSBjaMO6IHRow61jaCB0csOqbi5cbiAgICBkZWxldGUgY29weS5nZXRDb21wb25lbnRPdXRsZXQ7XG5cbiAgICBjb25zdCB7IGNoaWxkcmVuLCBkYXRhLCAuLi5yZXN0IH0gPSBjb3B5O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3QsXG4gICAgICAuLi4oZGF0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGRhdGE6IGNsb25lRGVlcChkYXRhKSB9KSxcbiAgICAgIC4uLihjaGlsZHJlbiA/IHsgY2hpbGRyZW46IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZGVlcENsb25lVHJlZShjaGlsZCkpIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hhbGxvd0Nsb25lVHJlZShub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHsgLi4ubm9kZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLm5vZGUsIGNoaWxkcmVuOiBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuc2hhbGxvd0Nsb25lVHJlZShjaGlsZCkpIH07XG4gIH1cblxuICAvKipcbiAgICogR8OhbiBgbGF5ZXJJbmRleGAga2jDoWMgbmhhdSBjaG8gdOG7q25nIGto4buRaSBraGkgYuG6rXQgY2jhu5NuZyBraOG7kWkuXG4gICAqXG4gICAqIPCflLQgYGFsbG93TXVsdGlMYXllcjogdHJ1ZWAgTeG7mFQgTcOMTkgga2jDtG5nIGNobyBraOG7kWkgxJHDqCBuaGF1LiBNw6MgbGliIHNvIGBsYXllckluZGV4YCBj4bunYSBoYWkga2jhu5FpOlxuICAgKiBLSMOBQyBuaGF1IHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAqIGBkZWZhdWx0TGF5ZXJJbmRleGAg4oCUIHThu6ljIEPDmU5HIGzhu5twLCBuw6puIGvDqW8gdsOgbyBuaGF1IGzDoCBi4buLIGNo4bq3biB5IG5oxrAgbMaw4bubaSB0aMaw4budbmcgKG5nxrDhu51pIGTDuW5nXG4gICAqIGLDoW8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgKlxuICAgKiBOxqFpIGTDuW5nIHThu7Ega2hhaSBgbGF5ZXJJbmRleGAgdGjDrCBnaeG7ryBuZ3V5w6puOyBhaSBraMO0bmcga2hhaSB0aMOsIHRoxrAgdmnhu4duIHjhur9wIG3hu5dpIGto4buRaSBt4buZdCBs4bubcFxuICAgKiB0aGVvIHRo4bupIHThu7EsIMSR4bunIMSR4buDIG3hu41pIGPhurdwIMSR4buBdSBraMOhYyBs4bubcC5cbiAgICovXG4gIHByaXZhdGUgYXNzaWduT3ZlcmxhcExheWVycyhyb290OiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGNhbk92ZXJsYXAgPSBjb25maWc/Lm1vZGUgPT09IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZy5mcmVlIHx8IChjb25maWc/LmFsbG93T3ZlcmxhcCA/PyBmYWxzZSk7XG5cbiAgICBpZiAoIWNhbk92ZXJsYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGF5ZXIgPSAwO1xuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgICBpZiAoY2hpbGQubGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGF5ZXIgKz0gMTtcbiAgICAgICAgICBjaGlsZC5sYXllckluZGV4ID0gbGF5ZXI7XG4gICAgICAgIH1cblxuICAgICAgICB3YWxrKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2Fsayhyb290KTtcblxuICB9XG5cbiAgLyoqIMSQxrBhIG3hu5l0IGto4buRaSBsw6puIHRyw6puIHThuqV0IGPhuqM6IGzhu5twIGPhu6dhIG7DsyA9IGzhu5twIGzhu5tuIG5o4bqldCDEkWFuZyBjw7MgKyAxLiAqL1xuICBwcml2YXRlIHJhaXNlVG9Ub3BMYXllcihpdGVtOiBHcmlkc3Rlckl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRvcExheWVyID0gMDtcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgdG9wTGF5ZXIgPSBNYXRoLm1heCh0b3BMYXllciwgY2hpbGQubGF5ZXJJbmRleCA/PyAwKTtcbiAgICAgICAgd2FsayhjaGlsZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhbGsocm9vdCk7XG5cbiAgICAvLyBgaXRlbWAgZ3JpZHN0ZXIgdHLhuqMgduG7gSBDSMONTkggbMOgIG9iamVjdCBub2RlIGPhu6dhIGPDonkgKHRydXnhu4FuIHRo4bqzbmcgcXVhIGBbaXRlbV1gKSwgbsOqbiBnw6FuIHbDoG9cbiAgICAvLyDEkcOieSBsw6AgY8OieSBjxaluZyDEkeG7lWkgdGhlby5cbiAgICBjb25zdCBub2RlID0gaXRlbSBhcyB1bmtub3duIGFzIFRfZ3JpZExheW91dF9ub2RlO1xuXG4gICAgaWYgKG5vZGUubGF5ZXJJbmRleCA9PT0gdG9wTGF5ZXIpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUubGF5ZXJJbmRleCA9IHRvcExheWVyICsgMTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBT4busQSBDw4JZIOKAlCB0aMawIHZp4buHbiDEkcOjIGdp4buvIGPDonkgbsOqbiBi4bqhbiBLSMOUTkcgcGjhuqNpIHRydXnhu4FuIG7DsyB2w6BvLlxuICAvLyBN4buNaSBow6BtIGTGsOG7m2kgxJHDonkgdOG7sSB24bq9IGzhuqFpOyBraMO0bmcgY+G6p24gZ+G7jWkgYHJlZnJlc2goKWAuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBUaMOqbSBt4buZdCBraOG7kWkuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIGto4buRaSBt4bubaSDigJQgS0jDlE5HIGPhuqduIGBpZGAgKHRoxrAgdmnhu4duIHNpbmgpIHbDoCBgeGAvYHlgICh04buxIMSR4bq3dCB4deG7kW5nIGjDoG5nIHRy4buRbmcpLlxuICAgKiBAcGFyYW0gcGFyZW50SWQgY29udGFpbmVyIG114buRbiB0aMOqbSB2w6BvOyBi4buPIHRy4buRbmcgdGjDrCB0aMOqbSB2w6BvIG3hurd0IHBo4bqzbmcgZ+G7kWMuXG4gICAqIEByZXR1cm5zIGto4buRaSB24burYSB04bqhbyAoa8OobSBgaWRgIHbhu6thIHNpbmgpLCBob+G6t2MgYHVuZGVmaW5lZGAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBjb250YWluZXIuXG4gICAqL1xuICBhZGRCbG9jayhpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSwgcGFyZW50SWQ/OiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBhZGRlZCA9IHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmFkZENoaWxkKHJvb3QsIHBhcmVudElkID8/IHJvb3QuaWQsIGl0ZW0pIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGjDqm0gbeG7mXQga2jhu5FpIHThuqFpIHRv4bqhIMSR4buZIChjb2wsIHJvdykgY+G7pSB0aOG7gyB2w6AgdOG7sSDEkeG7mW5nIMSR4bqpeSBjw6FjIGto4buRaSB2YSBjaOG6oW0geHXhu5FuZyBkxrDhu5tpLlxuICAgKi9cbiAgaW5zZXJ0QmxvY2tXaXRoQ29sbGlzaW9uKFxuICAgIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICAgIHRhcmdldENvbCA9IDAsXG4gICAgdGFyZ2V0Um93ID0gMCxcbiAgICBwYXJlbnRJZD86IHN0cmluZyxcbiAgKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgYWRkZWQgPSByb290XG4gICAgICA/IHRoaXMudHJlZVNlcnZpY2UuaW5zZXJ0V2l0aENvbGxpc2lvbihyb290LCBwYXJlbnRJZCA/PyByb290LmlkLCBpdGVtLCB0YXJnZXRDb2wsIHRhcmdldFJvdylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZURyYWdQYXlsb2FkID0gc2lnbmFsPHVua25vd24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIMSQ4bq3dCBwYXlsb2FkIGtoaSBi4bqvdCDEkeG6p3Uga8OpbyB04burIGLDqm4gbmdvw6BpIHbDoG8gKHbDrSBk4bulOiBwYWxldHRlLCBkcmF3ZXIpICovXG4gIHNldERyYWdQYXlsb2FkKHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkLnNldChwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKiBM4bqleSBwYXlsb2FkIMSRYW5nIGvDqW8gKi9cbiAgZ2V0RHJhZ1BheWxvYWQoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJhZ1BheWxvYWQoKTtcbiAgfVxuXG4gIC8qKiBYb8OhIHBheWxvYWQga2hpIGvhur90IHRow7pjIGvDqW8gKi9cbiAgY2xlYXJEcmFnUGF5bG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqIFhvw6EgbeG7mXQga2jhu5FpLiBYb8OhIGNvbnRhaW5lciBsw6AgeG/DoSBj4bqjIHJ14buZdC4gVHLhuqMgYGZhbHNlYCBraGkga2jDtG5nIHhvw6EgxJHGsOG7o2MgKHZkIGto4buRaSBn4buRYykuICovXG4gIHJlbW92ZUJsb2NrKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGRvbmUgPSByb290ID8gdGhpcy50cmVlU2VydmljZS5yZW1vdmVCeUlkKHJvb3QsIGlkKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIFPhu5EgY+G7mXQgdGjhuq10IGPhu6dhIGzGsOG7m2kgY+G6pXAgdHJhbmcuXG4gICAqXG4gICAqIPCflLQgTeG6t2MgxJHhu4tuaCBwaOG6o2kgVFLDmU5HIGBtaW5Db2xzL21heENvbHNgIGPhu6dhIGBncmlkTGF5b3V0Um9vdENvbmZpZygpYC4gVHLGsOG7m2MgxJHDonkgY2jhu5cgbsOgeSB0cuG6oyAyNFxuICAgKiB0cm9uZyBraGkgbMaw4bubaSB24bq9IDEyOiBuxqFpIGTDuW5nIGtow7RuZyB0cnV54buBbiBgY29sc2AgdGjDrCB2YSBjaOG6oW0sIGB0b0NvbnRhaW5lcmAgdsOgIGBjb21wYWN0YCB0w61uaFxuICAgKiB0aGVvIDI0IGPhu5l0IGPDsm4gbcOgbiBow6xuaCBjaOG7iSBjw7MgMTIg4oCUIGto4buRaSByxqFpIHJhIG5nb8OgaSBtw6lwIHBo4bqjaSBtw6Aga2jDtG5nIGFpIGhp4buDdSB2w6wgc2FvLlxuICAgKi9cbiAgZ2V0IHRvdGFsQ29sdW1ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29scyA/PyBncmlkTGF5b3V0Um9vdENvbmZpZygpLm1heENvbHMgPz8gMTI7XG4gIH1cblxuICAvKipcbiAgICogQ2hp4buBdSBjYW8gbeG7mXQgaMOgbmcgbMaw4bubaSAocGl4ZWwpIGTDuW5nIMSR4buDIHTDrW5oIGtodW5nIHhlbSB0csaw4bubYyBsw7pjIGvDqW8gdGjhuqMuXG4gICAqXG4gICAqIPCflLQgUGjhuqNpIMSR4buNYyB04burIGBjb25maWcucm93SGVpZ2h0YCBj4bunYSBuxqFpIGTDuW5nLiBUcsaw4bubYyDEkcOieSBgY2FsY3VsYXRlRHJvcEdob3N0YCDEkcOzbmcgY+G7qW5nIDY4LCBuw6puXG4gICAqIG3hurd0IHBo4bqzbmcga2hhaSBow6BuZyB0aOG6pXAgdGjDrCBraHVuZyB4ZW0gdHLGsOG7m2MgY2FvIGfhuqVwIG5oaeG7gXUgbOG6p24ga2jhu5FpIHRo4bqtdCDigJQgbsahaSBkw7luZyBwaOG6o2kg4bqpbiBraHVuZ1xuICAgKiBj4bunYSB0aMawIHZp4buHbiDEkWkgcuG7k2kgdOG7sSB24bq9IGzhuqFpLlxuICAgKi9cbiAgZ2V0IHJvd1N0ZXBQeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ucm93SGVpZ2h0ID8/IGdyaWRMYXlvdXRSb290Q29uZmlnKCkuZml4ZWRSb3dIZWlnaHQgPz8gNjg7XG4gIH1cblxuICAvKipcbiAgICogS2hlIE5Iw4xOIFRI4bqkWSBnaeG7r2EgaGFpIGto4buRaSBj4bqlcCBn4buRYyAocHgpLiBgMGAgPSBraMO0bmcgw6FwLCBnaeG7ryDEkcO6bmcgaMOgbmggdmkgY8WpLlxuICAgKi9cbiAgZ2V0IHZpc3VhbEdhcFB4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy52aXN1YWxHYXAgPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiDEkOG7lWkgc+G7kSBj4buZdCAvIHPhu5EgaMOgbmcgY+G7p2EgbeG7mXQga2jhu5FpIHLhu5NpIHbhur0gbOG6oWkuXG4gICAqXG4gICAqIEvDqW8gYGNvbHNgIHLhu5luZyBxdcOhIG3DqXAgcGjhuqNpIHRow6wgZOG7i2NoIGto4buRaSBzYW5nIHRyw6FpIGNobyB24burYSwgdGhheSB2w6wgxJHhu4MgbsOzIHRyw6BuIHJhIG5nb8OgaSBsxrDhu5tpLlxuICAgKi9cbiAgcmVzaXplQmxvY2soaWQ6IHN0cmluZywgc2l6ZTogeyBjb2xzPzogbnVtYmVyOyByb3dzPzogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kQmxvY2soaWQpO1xuXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNpemUuY29scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBub2RlLmNvbHMgPSBzaXplLmNvbHM7XG4gICAgICBpZiAobm9kZS54ICsgc2l6ZS5jb2xzID4gdGhpcy50b3RhbENvbHVtbnMpIHtcbiAgICAgICAgbm9kZS54ID0gTWF0aC5tYXgoMCwgdGhpcy50b3RhbENvbHVtbnMgLSBzaXplLmNvbHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaXplLnJvd3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9kZS5yb3dzID0gc2l6ZS5yb3dzO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2goKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5ow6JuIGLhuqNuIG3hu5l0IGto4buRaSDigJQgxJHhurd0IGvhur8gYsOqbiBwaOG6o2kgbuG6v3UgY8OybiBjaOG7lywga2jDtG5nIHRow6wgeHXhu5FuZyBkw7JuZyBkxrDhu5tpLlxuICAgKlxuICAgKiBgdHJhbnNmb3JtRGF0YWAgxJHhu4MgbsahaSBkw7luZyDEkeG7lWkgcGjhuqduIGThu68gbGnhu4d1IHJpw6puZyBj4bunYSBtw6xuaCAodmQgbuG7kWkgdGjDqm0gXCIoQuG6o24gc2FvKVwiIHbDoG8gdGnDqnVcbiAgICogxJHhu4EpOyB0aMawIHZp4buHbiBraMO0bmcgdOG7sSDEkW/DoW4gdHLGsOG7nW5nIG7DoG8gbMOgIHRpw6p1IMSR4buBLlxuICAgKi9cbiAgZHVwbGljYXRlQmxvY2soaWQ6IHN0cmluZywgdHJhbnNmb3JtRGF0YT86IChkYXRhOiB1bmtub3duKSA9PiB1bmtub3duKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3Qgbm9kZSA9IHJvb3QgPyBmaW5kTm9kZVJlY3Vyc2l2ZShyb290LCBpZCkgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXJvb3QgfHwgIW5vZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGZpbmRQYXJlbnRSZWN1cnNpdmUocm9vdCwgaWQpO1xuICAgIGNvbnN0IGlzTmVzdGVkID0gQm9vbGVhbihwYXJlbnQgJiYgcGFyZW50LmlkICE9PSByb290LmlkKTtcbiAgICBjb25zdCBjbG9uZWREYXRhID0gY2xvbmVEZWVwKG5vZGUuZGF0YSk7XG5cbiAgICBsZXQgdGFyZ2V0WCA9IG5vZGUueCArIG5vZGUuY29scztcbiAgICBsZXQgdGFyZ2V0WSA9IG5vZGUueTtcblxuICAgIGlmICh0YXJnZXRYICsgbm9kZS5jb2xzID4gdGhpcy50b3RhbENvbHVtbnMpIHtcbiAgICAgIHRhcmdldFggPSAwO1xuICAgICAgdGFyZ2V0WSA9IG5vZGUueSArIG5vZGUucm93cztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRCbG9jayhcbiAgICAgIHtcbiAgICAgICAgeDogdGFyZ2V0WCxcbiAgICAgICAgeTogdGFyZ2V0WSxcbiAgICAgICAgY29sczogbm9kZS5jb2xzLFxuICAgICAgICByb3dzOiBub2RlLnJvd3MsXG4gICAgICAgIGRhdGE6IHRyYW5zZm9ybURhdGEgPyB0cmFuc2Zvcm1EYXRhKGNsb25lZERhdGEpIDogY2xvbmVkRGF0YSxcbiAgICAgICAgZ2V0Q29tcG9uZW50T3V0bGV0OiBub2RlLmdldENvbXBvbmVudE91dGxldCxcbiAgICAgIH0sXG4gICAgICBpc05lc3RlZCA/IHBhcmVudD8uaWQgOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgLyoqIEJp4bq/biBraOG7kWkgxJHGoW4gdGjDoG5oIENPTlRBSU5FUiDigJQgbuG7mWkgZHVuZyBjxakgdGjDoG5oIGto4buRaSBjb24gxJHhuqd1IHRpw6puLCBraMO0bmcgbeG6pXQgZOG7ryBsaeG7h3UuICovXG4gIHRvQ29udGFpbmVyKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGRvbmUgPSByb290ID8gdGhpcy50cmVlU2VydmljZS50b0NvbnRhaW5lcihyb290LCBpZCwgdGhpcy50b3RhbENvbHVtbnMpIDogZmFsc2U7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICAvKiogxJDGsGEgQ09OVEFJTkVSIHbhu4Ega2jhu5FpIMSRxqFuIOKAlCBraOG7kWkgY29uIMSRxrDhu6NjIG7Dom5nIGzDqm4gY+G6pXAgdHLDqm4sIGtow7RuZyBi4buLIHhvw6EuICovXG4gIHRvU2luZ2xlKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGRvbmUgPSByb290ID8gdGhpcy50cmVlU2VydmljZS50b1NpbmdsZShyb290LCBpZCkgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKiBE4buTbiBraOG7kWkga2jDrXQgbMOqbiB0csOqbiwgbOG6pXAgaOG6v3QgY2jhu5cgdHLhu5FuZy4gxJDhu4cgcXV5IHbDoG8gY29udGFpbmVyLiAqL1xuICBjb21wYWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbXBhY3Qocm9vdCwgdGhpcy50b3RhbENvbHVtbnMpO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIELhu5EgY+G7pWMgSEnhu4ZOIFThuqBJLCDEkcOjIGPhuq90IG3hu41pIHRoYW0gY2hp4bq/dSDigJQgZ+G7rWkgdGjhurNuZyB4deG7kW5nIGJhY2tlbmQgxJHGsOG7o2MuXG4gICAqXG4gICAqIETDuW5nIGtoaSBi4bqlbSBuw7p0IEzGsHUuIEtow6FjIGBSb290KClgIOG7nyBjaOG7lyDEkcOieSBsw6AgYuG6o24gU0FPOiBuxqFpIGTDuW5nIGPDsyBz4butYSBnw6wgdHLDqm4ga+G6v3QgcXXhuqMgY8WpbmdcbiAgICoga2jDtG5nIMSR4bulbmcgdOG7m2kgY8OieSBtw6AgdGjGsCB2aeG7h24gxJFhbmcgduG6vS5cbiAgICpcbiAgICogQHJldHVybnMgYHVuZGVmaW5lZGAga2hpIG3hurd0IHBo4bqzbmcgY2jGsGEgYGluaXQoKWAuXG4gICAqL1xuICBleHBvcnRMYXlvdXQoKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICByZXR1cm4gcm9vdCA/IHRoaXMuZGVlcENsb25lVHJlZShyb290KSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUw6xtIG3hu5l0IGto4buRaSB0aGVvIGlkLiAqL1xuICBmaW5kQmxvY2soaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRCeUlkKHJvb3QsIGlkKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUw6xtIGto4buRaSBjaGEgdHLhu7FjIHRp4bq/cCBj4bunYSBt4buZdCBraOG7kWkuICovXG4gIGZpbmRQYXJlbnRCbG9jayhpZDogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICByZXR1cm4gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UuZmluZFBhcmVudChyb290LCBpZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogxJDhurd0IHThu7cgbOG7hyB0aHUgcGjDs25nIGPhu6dhIGNhbnZhcyAoa+G6uXAgZ2nhu69hIG1pbiB2w6AgbWF4KS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFThu7cgbOG7hyAoMC40ID0gNDAlLCAxLjAgPSAxMDAlLCAxLjUgPSAxNTAlKVxuICAgKiBAcGFyYW0gcGVyc2lzdEtleSBLaMOzYSBsb2NhbFN0b3JhZ2UgxJHhu4MgbMawdSBs4bqhaSAoYuG7jyB0cuG7kW5nIHRow6wgbOG6pXkgdOG7qyBjb25maWcpXG4gICAqL1xuICBzZXRab29tKHZhbHVlOiBudW1iZXIsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtaW4gPSB0aGlzLmNvbmZpZz8uem9vbU1pbiA/PyAwLjQ7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5jb25maWc/Lnpvb21NYXggPz8gMS41O1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCkgLyAxMDApKTtcbiAgICB0aGlzLnpvb21MZXZlbC5zZXQoY2xhbXBlZCk7XG5cbiAgICBjb25zdCBzdG9yYWdlS2V5ID0gcGVyc2lzdEtleSA/PyB0aGlzLmNvbmZpZz8uc3RvcmFnZUtleTtcbiAgICBpZiAoc3RvcmFnZUtleSAmJiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgU3RyaW5nKGNsYW1wZWQpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgbG9jYWxTdG9yYWdlIGFjY2VzcyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIC8qKiBQaMOzbmcgdG8gdGjDqm0gbeG7mXQgYsaw4bubYyAobeG6t2MgxJHhu4tuaCAwLjA1IHThu6ljIDUlKSAqL1xuICB6b29tSW4oc3RlcD86IG51bWJlciwgcGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzdGVwID8/IHRoaXMuY29uZmlnPy56b29tU3RlcCA/PyAwLjA1O1xuICAgIHRoaXMuc2V0Wm9vbSh0aGlzLnpvb21MZXZlbCgpICsgcywgcGVyc2lzdEtleSk7XG4gIH1cblxuICAvKiogVGh1IG5o4buPIGLhu5t0IG3hu5l0IGLGsOG7m2MgKG3hurdjIMSR4buLbmggMC4wNSB04bupYyA1JSkgKi9cbiAgem9vbU91dChzdGVwPzogbnVtYmVyLCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHN0ZXAgPz8gdGhpcy5jb25maWc/Lnpvb21TdGVwID8/IDAuMDU7XG4gICAgdGhpcy5zZXRab29tKHRoaXMuem9vbUxldmVsKCkgLSBzLCBwZXJzaXN0S2V5KTtcbiAgfVxuXG4gIC8qKiDEkOG6t3QgbOG6oWkgdOG7tyBs4buHIHRodSBwaMOzbmcgZ+G7kWMgMTAwJSAoMS4wKSAqL1xuICByZXNldFpvb20ocGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0Wm9vbSgxLjAsIHBlcnNpc3RLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFThu7EgxJHhu5luZyB0w61uaCB0b8OhbiB2w6AgxJHhurd0IHThu7cgbOG7hyB0aHUgcGjDs25nIMSR4buDIGNhbnZhcyB24burYSB24bq3biB24bubaSBjaGnhu4F1IHLhu5luZyBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJXaWR0aCBDaGnhu4F1IHLhu5luZyBjb250YWluZXIgxJFvIMSRxrDhu6NjIChweClcbiAgICogQHBhcmFtIHN0YWdlV2lkdGggQ2hp4buBdSBy4buZbmcgY2h14bqpbiBj4bunYSBjYW52YXMgKG3hurdjIMSR4buLbmggMTY2OHB4KVxuICAgKiBAcGFyYW0gcGFkZGluZyBLaG/huqNuZyBjw6FjaCBs4buBIGhhaSBiw6puICht4bq3YyDEkeG7i25oIDQ4cHgpXG4gICAqIEBwYXJhbSBwZXJzaXN0S2V5IEtow7NhIGxvY2FsU3RvcmFnZVxuICAgKiBAcmV0dXJucyBU4bu3IGzhu4cgdGh1IHBow7NuZyB24burYSB0w61uaFxuICAgKi9cbiAgZml0VG9TY3JlZW4oY29udGFpbmVyV2lkdGg6IG51bWJlciwgc3RhZ2VXaWR0aD86IG51bWJlciwgcGFkZGluZyA9IDQ4LCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YXJnZXRXaWR0aCA9IHN0YWdlV2lkdGggPz8gdGhpcy5jb25maWc/LnN0YWdlV2lkdGggPz8gMTY2ODtcbiAgICBjb25zdCBtaW4gPSB0aGlzLmNvbmZpZz8uem9vbU1pbiA/PyAwLjQ7XG4gICAgY29uc3QgbWF4ID0gMS4yNTtcbiAgICBjb25zdCByYXRpbyA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBNYXRoLnJvdW5kKCgoY29udGFpbmVyV2lkdGggLSBwYWRkaW5nKSAvIHRhcmdldFdpZHRoKSAqIDEwMCkgLyAxMDApKTtcbiAgICB0aGlzLnNldFpvb20ocmF0aW8sIHBlcnNpc3RLZXkpO1xuICAgIHJldHVybiByYXRpbztcbiAgfVxuXG4gIC8qKiBLaeG7g20gdHJhIHTDrW5oIG7Eg25nIHRodSBwaMOzbmcgY8OzIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGLhuq10IGtow7RuZyAqL1xuICBpc1pvb21Db25maWd1cmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuY29uZmlnPy5lbmFibGVab29tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBD4buVbmcgRFVZIE5I4bqkVCBjaG8gY2FudmFzIGPhu6dhIHRoxrAgdmnhu4duLiBOxqFpIGTDuW5nIEtIw5RORyBn4buNaSB04bubaSDEkcOieS5cbiAgICpcbiAgICogTeG7jWkgdGjhu6kgY2FudmFzIGPhuqduIMSR4buBdSBsw6AgYHByaXZhdGVgIMSR4buDIGtow7RuZyBs4buNdCByYSBBUEkgY8O0bmcga2hhaTsgZ29tIHbDoG8gbeG7mXQgZ2V0dGVyIHRoZW8gxJHDum5nXG4gICAqIGtodcO0biBgRnVuY3Rpb25zQ29udHJvbGAgY+G7p2EgYuG7mSBxdXkgxrDhu5tjLCB0aGF5IHbDrCDEkeG7gyBy4bqjaSByw6FjIGjDoG0gcHVibGljIG3DoCBuZ8aw4budaSBuZ2/DoGkgdMaw4bufbmdcbiAgICogbcOsbmggcGjhuqNpIGfhu41pIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gICAqL1xuICBnZXQgRnVuY3Rpb25zQ29udHJvbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF4Q29udGFpbmVyRGVwdGg6ICgpID0+IHRoaXMubWF4Q29udGFpbmVyRGVwdGgoKSxcbiAgICAgIGNvbnRhaW5lclBhZGRpbmc6ICgpID0+IHRoaXMuY29udGFpbmVyUGFkZGluZygpLFxuICAgICAgaXNab29tRW5hYmxlZDogKCkgPT4gdGhpcy5pc1pvb21Db25maWd1cmVkKCksXG4gICAgICB6b29tOiAoKSA9PiB0aGlzLnpvb21MZXZlbCgpLFxuICAgICAgc2V0Wm9vbTogKHY6IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLnNldFpvb20odiwga2V5KSxcbiAgICAgIHpvb21JbjogKHN0ZXA/OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy56b29tSW4oc3RlcCwga2V5KSxcbiAgICAgIHpvb21PdXQ6IChzdGVwPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuem9vbU91dChzdGVwLCBrZXkpLFxuICAgICAgcmVzZXRab29tOiAoa2V5Pzogc3RyaW5nKSA9PiB0aGlzLnJlc2V0Wm9vbShrZXkpLFxuICAgICAgZml0VG9TY3JlZW46IChjVzogbnVtYmVyLCBzVz86IG51bWJlciwgcGFkPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuZml0VG9TY3JlZW4oY1csIHNXLCBwYWQsIGtleSksXG4gICAgICBncmlkc3Rlck9wdGlvbnM6IChkZXB0aDogbnVtYmVyLCBjYj86ICgpID0+IHZvaWQpID0+IHRoaXMuYnVpbGRHcmlkc3Rlck9wdGlvbnMoZGVwdGgsIGNiKSxcbiAgICAgIGF0dGFjaE5vZGU6IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgZGVwdGg6IG51bWJlciwgaG9zdDogVmlld0NvbnRhaW5lclJlZiwgY2hpbGRDYW52YXM/OiBUZW1wbGF0ZVJlZjx1bmtub3duPikgPT5cbiAgICAgICAgdGhpcy5hdHRhY2hOb2RlKG5vZGUsIGRlcHRoLCBob3N0LCBjaGlsZENhbnZhcyksXG4gICAgICBkZXRhY2hOb2RlOiAobm9kZUlkOiBzdHJpbmcpID0+IHRoaXMuZGV0YWNoTm9kZShub2RlSWQpLFxuICAgICAgZ2V0Tm9kZUVsZW1lbnQ6IChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKSA9PiB0aGlzLmdldE5vZGVFbGVtZW50KG5vZGVJZCwgc2NvcGUpLFxuICAgICAgZ2V0Tm9kZUNhbnZhc0VsZW1lbnQ6IChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKSA9PiB0aGlzLmdldE5vZGVDYW52YXNFbGVtZW50KG5vZGVJZCwgc2NvcGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHLhuqMgduG7gSB24buPIERPTSBj4bunYSBt4buZdCBraOG7kWkgdGhlbyBgaWRgLlxuICAgKlxuICAgKiDwn5S0IE7GoWkgZMO5bmcgY+G6p24gY2jhuqFtIHbDoG8gRE9NIGPhu6dhIGto4buRaSAoxJFvIGvDrWNoIHRoxrDhu5tjLCBn4bqvbiBs4bubcCBwaOG7pyByacOqbmcpIELhuq5UIEJV4buYQyDEkWkgcXVhIMSRw6J5LlxuICAgKiBUcsaw4bubYyBraGkgY8OzIGjDoG0gbsOgeSwgbsahaSBkw7luZyBwaOG6o2kgdOG7sSB2aeG6v3QgYHF1ZXJ5U2VsZWN0b3IoJy5saWJzLXVpLWdyaWQtbGF5b3V0LWJsb2NrLXNoZWxsWy4uLl0nKWBcbiAgICog4oCUIHThu6ljIGLDoW0gdsOgbyB0w6puIGNsYXNzIE7hu5hJIELhu5ggY+G7p2EgdGjGsCB2aeG7h246IMSR4buVaSB0w6puIGNsYXNzIGzDoCBtw6BuIGLDqm4ga2lhIHbhu6EgSU0gTOG6tk5HLCBiacOqbiBk4buLY2hcbiAgICogduG6q24geGFuaCB2w6wgY2h14buXaSBzZWxlY3RvciBraMO0bmcgYWkga2nhu4NtLlxuICAgKlxuICAgKiBgc2NvcGVgIGdp4bubaSBo4bqhbiBwaOG6oW0gdmkgdMOsbSAobeG6t2MgxJHhu4tuaCBj4bqjIHTDoGkgbGnhu4d1KSDigJQgY+G6p24ga2hpIG5oaeG7gXUgbeG6t3QgcGjhurNuZyBjw7luZyBu4bqxbSB0csOqbiBtw6BuLlxuICAgKi9cbiAgZ2V0Tm9kZUVsZW1lbnQobm9kZUlkOiBzdHJpbmcsIHNjb3BlPzogUGFyZW50Tm9kZSk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gc2NvcGUgPz8gZG9jdW1lbnQ7XG5cbiAgICByZXR1cm4gKHJvb3QucXVlcnlTZWxlY3RvcihgLmxpYnMtdWktZ3JpZC1sYXlvdXQtYmxvY2stc2hlbGxbZGF0YS1ub2RlLWlkPVwiJHtub2RlSWR9XCJdYCkgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVHLhuqMgduG7gSBt4bq3dCBwaOG6s25nIEzhu5JORyBu4bqxbSB0cm9uZyBt4buZdCBraOG7kWkgY29udGFpbmVyIChraOG7kWkgY8OzIGNvbiksIG7hur91IGPDsy5cbiAgICpcbiAgICogVMOhY2ggcmnDqm5nIGto4buPaSBgZ2V0Tm9kZUVsZW1lbnRgIHbDrCBuxqFpIGTDuW5nIHRoxrDhu51uZyBj4bqnbiBjaMOobiBwaOG6p24gdOG7rSBj4bunYSBtw6xuaCB2w6BvIFRSxq/hu5pDIG3hurd0IHBo4bqzbmdcbiAgICogbOG7k25nIG7DoHkgKHbDrSBk4bulIGjDoG5nIHRpw6p1IMSR4buBIGPhu6dhIGto4buRaSBnaMOpcCksIG7Dqm4gcGjhuqNpIGPhuqdtIMSRw7puZyBuw7MgY2jhu6kga2jDtG5nIHBo4bqjaSBj4bqjIHbhu48uXG4gICAqL1xuICBnZXROb2RlQ2FudmFzRWxlbWVudChub2RlSWQ6IHN0cmluZywgc2NvcGU/OiBQYXJlbnROb2RlKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNoZWxsID0gdGhpcy5nZXROb2RlRWxlbWVudChub2RlSWQsIHNjb3BlKTtcblxuICAgIGlmICghc2hlbGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzaGVsbC5xdWVyeVNlbGVjdG9yKCc6c2NvcGUgPiBsaWJzX3VpLXNlcnZpY2VzLWdyaWRfbGF5b3V0LWNhbnZhcycpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUlucHV0cyhcbiAgICByZWY6IENvbXBvbmVudFJlZjx1bmtub3duPixcbiAgICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgICBkZXB0aDogbnVtYmVyLFxuICAgIGNoaWxkQ2FudmFzPzogVGVtcGxhdGVSZWY8dW5rbm93bj5cbiAgKTogdm9pZCB7XG4gICAgcmVmLnNldElucHV0KCdkYXRhJywgbm9kZS5kYXRhKTtcbiAgICByZWYuc2V0SW5wdXQoJ25vZGUnLCBub2RlKTtcbiAgICByZWYuc2V0SW5wdXQoJ2lzRWRpdE1vZGUnLCB0aGlzLmVkaXRNb2RlKCkpO1xuICAgIHJlZi5zZXRJbnB1dCgnZGVwdGgnLCBkZXB0aCk7XG4gICAgLy8g8J+UtCBDSOG7iCDEkeG6t3Qga2hpIGPDsyBraHXDtG46IGBzZXRJbnB1dGAgduG7m2kgbeG7mXQgaW5wdXQgY29tcG9uZW50IGtow7RuZyBraGFpIGzDoCBs4buXaSBsw7pjIGNo4bqheSwgbcOgXG4gICAgLy8gY29tcG9uZW50IG7hu5lpIGR1bmcgY+G7p2Ega2jhu5FpIEzDgSB0aMOsIGtow7RuZyBj4bqnbiBiaeG6v3QgxJHhur9uIG3hurd0IHBo4bqzbmcgbOG7k25nLlxuICAgIGlmIChjaGlsZENhbnZhcykge1xuICAgICAgcmVmLnNldElucHV0KCdjaGlsZENhbnZhcycsIGNoaWxkQ2FudmFzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
755
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2dyaWQtbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsVUFBVSxFQUFpQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTN0Q7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsNkZBQTZGO0lBQzdGLHdGQUF3RjtJQUN4RixtRkFBbUY7SUFDbEUsV0FBVyxHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQUNqRSxvRkFBb0Y7SUFDbkUsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ2hFOzs7OztPQUtHO0lBQ2MscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFbkU7UUFDRSwrRkFBK0Y7UUFDL0YseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxNQUFNLENBQXVCO0lBQ3BCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FB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b3lSZWYsIEluamVjdGFibGUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UsIEdyaWRzdGVyQ29uZmlnLCBHcmlkc3Rlckl0ZW0gfSBmcm9tICdncmlkc3RlcjE4JztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ3JpZExheW91dE5lc3RlZENvbmZpZywgZ3JpZExheW91dFJvb3RDb25maWcgfSBmcm9tICcuL2RlZmluZXMvZ3JpZHN0ZXItY29uZmlnLmRlZmluZSc7XG5pbXBvcnQgeyBmaW5kTm9kZVJlY3Vyc2l2ZSwgZmluZFBhcmVudFJlY3Vyc2l2ZSB9IGZyb20gJy4vZGVmaW5lcy9jb2xsaXNpb24uZGVmaW5lJztcbmltcG9ydCB7IExpYnNVaUdyaWRMYXlvdXRUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVfZ3JpZExheW91dF9tb2RlX3N0cmluZyxcbiAgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50LFxuICBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgVF9ncmlkTGF5b3V0X2NvbmZpZyxcbiAgVF9ncmlkTGF5b3V0X25vZGUsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEThu7FuZyBt4buZdCBt4bq3dCBwaOG6s25nIGvDqW8gdGjhuqMgdsOgIHThu7EgZ+G6r24gY29tcG9uZW50IGPhu6dhIG7GoWkgZMO5bmcgbMOqbiB04burbmcga2jhu5FpLlxuICpcbiAqIE7GoWkgZMO5bmcgY2jhu4kgY+G6p24gxJHGsGEgdsOgbzogbG/huqFpIGNvbXBvbmVudCBtdeG7kW4gZOG7sW5nXG4gKiAoYG5vZGVDb21wb25lbnRUeXBlYCkgdsOgIGPDonkgZOG7ryBsaeG7h3UgKGBkYXRhYCkuIFRvw6BuIGLhu5kgdmnhu4djIHbhur0gbMaw4bubaSwga8OpbyB0aOG6oywgxJHhu5VpIGvDrWNoIHRoxrDhu5tjLFxuICogbOG7k25nIGNvbnRhaW5lciB2w6AgZOG7jW4gZOG6uXAgZG8gdGjGsCB2aeG7h24gbG8uXG4gKlxuICog8J+UtCDEkMOieSBsw6Agc2VydmljZSB0aGVvIFThu6pORyBt4bq3dCBwaOG6s25nLCBLSMOUTkcgYHByb3ZpZGVkSW46ICdyb290J2AuIEtoYWkgdHJvbmcgYHByb3ZpZGVyc2AgY+G7p2FcbiAqIGNvbXBvbmVudCBkw7luZyBuw7M7IGhhaSBt4bq3dCBwaOG6s25nIHRyw6puIGPDuW5nIG3hu5l0IG3DoG4gcGjhuqNpIGzDoCBoYWkgdGjhu7FjIHRo4buDIHJpw6puZywgZMO5bmcgY2h1bmcgdGjDrFxuICogYGNvbXBvbmVudFJlZnNgIGPhu6dhIG3hurd0IHBo4bqzbmcgbsOgeSBi4buLIG3hurd0IHBo4bqzbmcga2lhIGThu41uIG3huqV0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dFNlcnZpY2Uge1xuICAvLyDwn5S0IFThu7AgVOG6oE8sIGtow7RuZyBgaW5qZWN0YC4gTsahaSBkw7luZyBjaOG7iSBwaOG6o2kgdmnhur90IGBwcm92aWRlcnM6IFtMaWJzVWlHcmlkTGF5b3V0U2VydmljZV1gIOKAlFxuICAvLyBraMO0bmcgcGjhuqNpIGJp4bq/dCBiw6puIHRyb25nIHRoxrAgdmnhu4duIGPDsm4gc2VydmljZSBuw6BvIGtow6FjIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gIC8vIGBUcmVlU2VydmljZWAga2jDtG5nIGdp4buvIHRy4bqhbmcgdGjDoWkgZMO5bmcgY2h1bmcgbsOqbiBt4buXaSBt4bq3dCBwaOG6s25nIG3hu5l0IGLhuqNuIGzDoCDEkcO6bmcuXG4gIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2UgPSBuZXcgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlKCk7XG4gIC8qKiBMxrDhu6N0IHThuqNpIGNvbXBvbmVudCDEkWFuZyBjaOG7nSwgdGhlbyBpZCBraOG7kWkg4oCUIMSR4buDIGh14bu3IGtoaSBraOG7kWkgYuG7iyBn4buhIGdp4buvYSBjaOG7q25nLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdMb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb24+KCk7XG4gIC8qKlxuICAgKiBC4buZIHRoZW8gZMO1aSBi4buBIHLhu5luZyBj4bunYSB04burbmcgbMaw4bubaSBM4buSTkcsIMSR4buDIG5n4bqvdCBraGkgc2VydmljZSBi4buLIGh14bu3LlxuICAgKlxuICAgKiDwn5S0IEdp4buvIHRoYW0gY2hp4bq/dSBsw6AgQuG6rlQgQlXhu5hDOiBgUmVzaXplT2JzZXJ2ZXJgIGtow7RuZyB04buxIHThuq90IHRoZW8gdsOybmcgxJHhu51pIGNvbXBvbmVudC4gS2jDtG5nIGThu41uXG4gICAqIHRow6wgbeG7l2kgbOG6p24gbuG6oXAgbOG6oWkgYuG7kSBj4bulYyAoxJHhu5VpIHRhYikgbOG6oWkgY2jhu5NuZyB0aMOqbSBt4buZdCBi4buZLCB2w6AgY2jDum5nIHbhuqtuIGNo4bqheSB0csOqbiBET00gxJHDoyBn4buhLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuZXN0ZWRSZXNpemVPYnNlcnZlcnMgPSBuZXcgU2V0PFJlc2l6ZU9ic2VydmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIPCflLQgU2VydmljZSBraGFpIHRyb25nIGBwcm92aWRlcnNgIGPhu6dhIGNvbXBvbmVudCBuw6puIEFuZ3VsYXIgaHXhu7cgbsOzIGPDuW5nIGNvbXBvbmVudCDigJQgdGjGsCB2aeG7h25cbiAgICAvLyB04buxIGThu41uIOG7nyDEkcOieSwgbsahaSBkw7luZyBLSMOUTkcgcGjhuqNpIGfhu41pIGBkZXN0cm95KClgIHRyb25nIGBuZ09uRGVzdHJveWAgKG5nxrDhu51pIGTDuW5nIGNo4buRdFxuICAgIC8vIDI4LzA4LzIwMjYpLiBC4bqvdCBuaOG7myBt4buZdCBixrDhu5tjIGThu41uIGThurlwIGzDoCBraeG7g3UgQVBJIGThu4UgcXXDqm4sIHbDoCBxdcOqbiB0aMOsIHLDsiBy4buJIGLhu5kgbmjhu5sgaW0gbOG6t25nLlxuICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWc/OiBUX2dyaWRMYXlvdXRfY29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudFJlZnMgPSBuZXcgTWFwPHN0cmluZywgQ29tcG9uZW50UmVmPHVua25vd24+PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdE5vZGUgPSBzaWduYWw8VF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRpdE1vZGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogdMSDbmcgbeG7l2kgbOG6p24gY8OieSDEkeG7lWkg4oCUIGNvbXBvbmVudCBjb24gxJHhu41jIMSR4buDIGJp4bq/dCBwaOG6o2kgdMOtbmggbOG6oWkgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9vbUxldmVsID0gc2lnbmFsPG51bWJlcj4oMSk7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCBjaOG7iSDEkeG7jWMgxJHhu4MgbsahaSBkw7luZyB0aGVvIGTDtWkuXG4gICAqXG4gICAqIPCflLQgTMOgIFRIVeG7mEMgVMONTkgsIGtow7RuZyBwaOG6o2kgZ2V0dGVyLiBHZXR0ZXIgdHLhuqMgc2lnbmFsIHRow6wgY2jhu5cgxJHhu41jIHBo4bqjaSB2aeG6v3QgYFZlcnNpb24oKSgpYCDigJRcbiAgICogcXXDqm4gY+G6t3Agbmdv4bq3YyB0aOG7qSBoYWkgbMOgIGNvbXB1dGVkIEtIw5RORyBwaOG7pSB0aHXhu5ljIHbDoG8gbsOzLCBjw6J5IMSR4buVaSBtw6AgbMaw4bubaSDEkeG7qW5nIGltLCB2w6BcbiAgICogVHlwZVNjcmlwdCBraMO0bmcgaOG7gSBiw6FvIGzhu5dpICjEkW8gMjgvMDgvMjAyNjogdGjDqm0ga2jhu5FpIGtow7RuZyBoaeG7h24sIHPhuq9wIGfhu41uIGtow7RuZyBuaMO6YyBuaMOtY2gpLlxuICAgKi9cbiAgcmVhZG9ubHkgUm9vdCA9IHRoaXMucm9vdE5vZGUuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBJc0VkaXRNb2RlID0gdGhpcy5lZGl0TW9kZS5hc1JlYWRvbmx5KCk7XG4gIC8qKiB0xINuZyBt4buXaSBs4bqnbiBjw6J5IGhv4bq3YyBj4bqldSBow6xuaCDEkeG7lWkgKi9cbiAgcmVhZG9ubHkgVmVyc2lvbiA9IHRoaXMudmVyc2lvbi5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IFpvb20gPSB0aGlzLnpvb21MZXZlbC5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIHRy4bqnbiBz4buRIGPhuqVwIGNvbnRhaW5lciBs4buTbmcgbmhhdSDigJQgY2FudmFzIMSR4buNYyDEkeG7gyBiaeG6v3QgY8OzIGNobyBjaHV54buDbiB0aMOgbmggY29udGFpbmVyIGtow7RuZyAqL1xuICBwcml2YXRlIG1heENvbnRhaW5lckRlcHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5tYXhDb250YWluZXJEZXB0aCA/PyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIGzhu4EgdHJvbmcgY+G7p2EgY29udGFpbmVyLCBweCDigJQgY2FudmFzIMSR4buNYyDEkeG7gyDEkeG6t3QgcGFkZGluZyBsw6puIHbhu48gY29udGFpbmVyICovXG4gIHByaXZhdGUgY29udGFpbmVyUGFkZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29udGFpbmVyUGFkZGluZyA/PyAxMjtcbiAgfVxuXG4gIC8qKiBLaOG7n2kgdOG6oW8gbeG6t3QgcGjhurNuZy4gR+G7jWkgbOG6oWkgc+G6vSBk4buNbiBz4bqhY2ggY29tcG9uZW50IGPFqSBy4buTaSBk4buxbmcgbOG6oWkgdOG7qyDEkeG6p3UuICovXG4gIGluaXQoY29uZmlnOiBUX2dyaWRMYXlvdXRfY29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgLy8g8J+UtCBC4buRIGPhu6VjIMSQw4MgTMavVSBraMO0bmcgxJFpIHF1YSBsdeG6rXQgY2jhurduIG7DoG8gY+G7p2EgZ2lhbyBkaeG7h246IGLhuqNuIGzGsHUgY8WpIChzaW5oIHRyxrDhu5tjIGtoaSBjw7MgdHLhuqduLFxuICAgIC8vIGhv4bq3YyBkbyB0aGFvIHTDoWMgbOG7l2kpIHbhuqtuIG1hbmcgY29udGFpbmVyIGzhu5NuZyBjb250YWluZXIuIFRy4bqnbiBgbWF4Q29udGFpbmVyRGVwdGhgIGNo4buJIOG6qW4gTsOaVFxuICAgIC8vIHRyw6puIGNhbnZhcyDigJQgbsOzIGtow7RuZyBz4butYSBk4buvIGxp4buHdSwgbsOqbiB0aGnhur91IGTDsm5nIG7DoHkgbMOgIHbhur0gcmEgxJHDum5nIGPDonkgcXXDoSBzw6J1IMSRw7MuXG4gICAgLy8gTsahaSBkw7luZyBLSMOUTkcgdOG7sSBn4buNaSDEkcaw4bujYzogYExpYnNVaUdyaWRMYXlvdXRUcmVlU2VydmljZWAgY+G7kSDDvSBraMO0bmcgeHXhuqV0LlxuICAgIHRoaXMudHJlZVNlcnZpY2UuZmxhdHRlbk92ZXJEZXB0aENvbnRhaW5lcnMoY29uZmlnLmRhdGEsIHRoaXMubWF4Q29udGFpbmVyRGVwdGgoKSk7XG4gICAgdGhpcy5hc3NpZ25PdmVybGFwTGF5ZXJzKGNvbmZpZy5kYXRhKTtcbiAgICAvLyDwn5S0IE5ow6JuIGLhuqNuIG5oxrAgYHJlZnJlc2goKWA6IGBpbml0KClgIGzhuqFpICjEkeG7lWkgY2jhur8gxJHhu5ksIGLhuq10L3Thuq90IGNo4buTbmcga2jhu5FpKSB0csOqbiBDw5lORyBvYmplY3QgY8OieVxuICAgIC8vIHRow6wgYEBmb3JgIGtow7RuZyBk4buxbmcgbOG6oWkgYGdyaWRzdGVyLWl0ZW1gLCBuw6puIGBsYXllckluZGV4YCB24burYSBnw6FuIGtow7RuZyB04bubaSBgJGl0ZW1gIHbDoCBraOG7kWlcbiAgICAvLyB24bqrbiBraMO0bmcgxJHDqCBuaGF1IMSRxrDhu6NjICjEkW8gMjgvMDgvMjAyNjogYGl0ZW0ubGF5ZXJJbmRleGAgPSAxfDJ8M3w0fDcgbcOgIGAkaXRlbS5sYXllckluZGV4YFxuICAgIC8vIHRvw6BuIGB1bmRlZmluZWRgKS5cbiAgICB0aGlzLnJvb3ROb2RlLnNldCh0aGlzLnNoYWxsb3dDbG9uZVRyZWUoY29uZmlnLmRhdGEpKTtcbiAgICB0aGlzLmVkaXRNb2RlLnNldChjb25maWcuaXNFZGl0TW9kZSA/PyBmYWxzZSk7XG5cbiAgICBsZXQgaW5pdGlhbFpvb20gPSBjb25maWcuaW5pdGlhbFpvb20gPz8gMTtcbiAgICBpZiAoY29uZmlnLnN0b3JhZ2VLZXkgJiYgdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oY29uZmlnLnN0b3JhZ2VLZXkpO1xuICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHNhdmVkKTtcbiAgICAgICAgICBjb25zdCBtaW4gPSBjb25maWcuem9vbU1pbiA/PyAwLjQ7XG4gICAgICAgICAgY29uc3QgbWF4ID0gY29uZmlnLnpvb21NYXggPz8gMS41O1xuICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPj0gbWluICYmIHBhcnNlZCA8PSBtYXgpIHtcbiAgICAgICAgICAgIGluaXRpYWxab29tID0gcGFyc2VkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBsb2NhbFN0b3JhZ2UgYWNjZXNzIGVycm9yXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuem9vbUxldmVsLnNldChpbml0aWFsWm9vbSk7XG5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICBzZXRFZGl0TW9kZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KHZhbHVlKTtcbiAgICAvLyDwn5S0IFBI4bqiSSBixqFtIGB2ZXJzaW9uYDogYGdyaWRzdGVyT3B0aW9ucygpYCDEkeG7jWMgYGVkaXRNb2RlYCDEkeG7gyBi4bqtdC904bqvdCBrw6lv4oCTdGjhuqMsIG3DoCBjb21wdXRlZFxuICAgIC8vIGBncmlkT3B0aW9uc2AgYsOqbiBjYW52YXMgY2jhu4kgY2jhuqF5IGzhuqFpIGtoaSBgVmVyc2lvbmAgxJHhu5VpLiBUaGnhur91IGTDsm5nIG7DoHkgdGjDrCDEkeG7lWkgY2jhur8gxJHhu5kgeG9uZ1xuICAgIC8vIGdyaWRzdGVyIHbhuqtuIGdp4buvIG9wdGlvbnMgY8WpIOKAlCBjaHV54buDbiBzYW5nIFhFTSBtw6Aga2jhu5FpIHbhuqtuIGvDqW8gxJHGsOG7o2MuXG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIMSQ4buVaSBz4buRIGjDoG5nIFThu5BJIFRISeG7glUgY+G7p2EgbMaw4bubaSBj4bqlcCB0cmFuZyDigJQgS0jDlE5HIGThu7FuZyBs4bqhaSBt4bq3dCBwaOG6s25nLlxuICAgKlxuICAgKiDwn5S0IGBtaW5Sb3dzYCBjaOG7iSDEkcaw4bujYyDEkeG7jWMgTeG7mFQgTOG6pk4gbMO6YyBgaW5pdCgpYCwgbsOqbiBuxqFpIGTDuW5nIG114buRbiDEkeG7lWkgbsOzIHRoZW8gY2jhur8gxJHhu5kgKHPhu61hIHRow6wgw7RcbiAgICogbGkgcGjhu6cga8OtbiBtw6BuLCB4ZW0gdGjDrCDEkcO6bmcgc+G7kSBow6BuZyBj4bunYSBi4buRIGPhu6VjKSBideG7mWMgcGjhuqNpIGfhu41pIGBpbml0KClgIGzhuqFpIOKAlCBtw6AgYGluaXQoKWAgaHXhu7dcbiAgICogc+G6oWNoIHLhu5NpIGThu7FuZyBs4bqhaSBt4buNaSBjb21wb25lbnQgbuG7mWkgZHVuZy4gSOG7hyBxdeG6oyDEkW8gxJHGsOG7o2MgMTUvMDkvMjAyNjogbeG7nyDhu58gY2jhur8gxJHhu5kgeGVtIHLhu5NpIGLhuqVtXG4gICAqIFPhu61hIHRow6wgbMaw4bubaSDEkeG7qW5nIOG7nyBz4buRIGjDoG5nIGPhu6dhIGLhu5EgY+G7pWMgKDI4IGjDoG5nID0gNDQ4cHgpIHRyb25nIGtoaSB2w7luZyBuaMOsbiBjYW8gaMahbiBuaGnhu4F1LCBuw6puXG4gICAqIMO0IGxpIG5n4burbmcgbmdheSBkxrDhu5tpIGto4buRaSBjdeG7kWkgdsOgIHBo4bqnbiBjw7JuIGzhuqFpIHRy4buRbmcgdHLGoW4ga2jDtG5nIGPDsyDEkcaw4budbmcga+G6uyBuw6BvLlxuICAgKi9cbiAgc2V0TWluUm93cyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZyB8fCAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCBtaW5Sb3dzOiB2YWx1ZSB9O1xuICAgIC8vIELGoW0gYHZlcnNpb25gIMSR4buDIGBncmlkT3B0aW9uc2AgYsOqbiBjYW52YXMgdMOtbmggbOG6oWkg4oCUIGPDuW5nIGzDvSBkbyBuaMawIGBzZXRFZGl0TW9kZWAuXG4gICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIELhuq10L3Thuq90IGNobyBraOG7kWkgY2jhu5NuZyBsw6puIG5oYXUg4oCUIEtIw5RORyBk4buxbmcgbOG6oWkgbeG6t3QgcGjhurNuZy5cbiAgICpcbiAgICogVHLGsOG7m2MgxJHDonkgbsahaSBkw7luZyBwaOG6o2kgZ+G7jWkgYGluaXQoKWAgbOG6oWkgxJHhu4MgxJHhu5VpIGPhu50gbsOgeSwgbcOgIGBpbml0KClgIGh14bu3IHPhuqFjaCBy4buTaSBk4buxbmcgbOG6oWkgbeG7jWlcbiAgICogY29tcG9uZW50IG7hu5lpIGR1bmcg4oCUIGzDo25nIHBow60sIHbDoCBuZ8aw4budaSBkw7luZyB0aOG6pXkgbcOgbiBjaOG7m3AgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICovXG4gIHNldEFsbG93T3ZlcmxhcCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIGFsbG93T3ZlcmxhcDogdmFsdWUgfTtcblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG5cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDwn5S0IEfDoW4gbOG7m3AgdsOgbyBDw4JZIMSQQU5HIFbhurwgKGByb290Tm9kZWApLCBLSMOUTkcgcGjhuqNpIGBjb25maWcuZGF0YWAuXG4gICAgLy8gYGluaXQoKWAgxJHDoyBjbG9uZSBgY29uZmlnLmRhdGFgIHNhbmcgYHJvb3ROb2RlYCBuw6puIGhhaSBvYmplY3QgS0jDgUMgbmhhdTsgZ8OhbiB2w6BvIGBjb25maWcuZGF0YWBcbiAgICAvLyB0aMOsIGByZWZyZXNoKClgIGNsb25lIGzhuqFpIHThu6sgYHJvb3ROb2RlYCDigJQgbOG7m3AgduG7q2EgZ8OhbiBraMO0bmcgdOG7m2kgYGdyaWRzdGVyLWl0ZW1gIG7DoG8sIGB6LWluZGV4YFxuICAgIC8vIGPhu6dhIG3hu41pIGto4buRaSDEkeG7qW5nIOG7nyBgMWAgdsOgIGto4buRaSBuw6BvIHbhur0gc2F1IHRow6wgbuG6sW0gdHLDqm46IGNo4buTbmcga2jhu5FpIFwibMO6YyDEkcaw4bujYyBsw7pjIGtow7RuZ1wiXG4gICAgLy8gKMSRbyAwNC8wOS8yMDI2OiBgaXRlbS5sYXllckluZGV4YCB1bmRlZmluZWQsIGBnZXRMYXllckluZGV4KClgID0gMCBjaG8gY+G6oyA4IGto4buRaSkuXG4gICAgdGhpcy5hc3NpZ25PdmVybGFwTGF5ZXJzKHJvb3QpO1xuICAgIC8vIFRoYXkgdGhhbSBjaGnhur91IGPDonkgxJHhu4MgYGxheWVySW5kZXhgIHbhu6thIGfDoW4gdOG7m2kgxJHGsOG7o2MgYCRpdGVtYCBj4bunYSBncmlkc3RlcjsgY29tcG9uZW50IG7hu5lpIGR1bmdcbiAgICAvLyBLSMOUTkcgYuG7iyBk4buxbmcgbOG6oWkgdsOsIGBhdHRhY2hOb2RlYCBuaOG6rW4gcmEgaWQgY8WpIHbDoCBjaOG7iSBgc2V0SW5wdXRgLlxuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEPhuqV1IGjDrG5oIGdyaWRzdGVyIGNobyBt4buZdCBj4bqlcCBsxrDhu5tpLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwdGggMCA9IGzGsOG7m2kgY+G6pXAgdHJhbmcsIOKJpSAxID0gbMaw4bubaSBs4buTbmcgdHJvbmcgY29udGFpbmVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkR3JpZHN0ZXJPcHRpb25zKGRlcHRoOiBudW1iZXIsIGl0ZW1DaGFuZ2VDYWxsYmFjaz86ICgpID0+IHZvaWQpOiBHcmlkc3RlckNvbmZpZyB7XG4gICAgY29uc3QgYmFzZSA9IGRlcHRoID09PSAwID8gZ3JpZExheW91dFJvb3RDb25maWcoKSA6IGdyaWRMYXlvdXROZXN0ZWRDb25maWcoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZyZWVNb2RlID0gY29uZmlnLm1vZGUgPT09IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZy5mcmVlO1xuICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLmVkaXRNb2RlKCk7XG4gICAgY29uc3QgY2FuT3ZlcmxhcCA9IGlzRnJlZU1vZGUgfHwgKGNvbmZpZy5hbGxvd092ZXJsYXAgPz8gZmFsc2UpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBzY2FsZTogdGhpcy56b29tTGV2ZWwoKSxcbiAgICAgIC4uLihjb25maWcuY29scyA/IHsgbWluQ29sczogY29uZmlnLmNvbHMsIG1heENvbHM6IGNvbmZpZy5jb2xzLCBtYXhJdGVtQ29sczogY29uZmlnLmNvbHMgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcucm93SGVpZ2h0ICYmIGRlcHRoID09PSAwID8geyBmaXhlZFJvd0hlaWdodDogY29uZmlnLnJvd0hlaWdodCB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5taW5Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pblJvd3M6IGNvbmZpZy5taW5Sb3dzIH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPiAwICYmIGNvbmZpZy5uZXN0ZWRNaW5Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pblJvd3M6IGNvbmZpZy5uZXN0ZWRNaW5Sb3dzIH0gOiB7fSksXG4gICAgICAvLyBLaGUgdsOgIGNoaeG7gXUgY2FvIGjDoG5nIGtow6FjIG5oYXUgdGhlbyBj4bqlcDogbMaw4bubaSB0cmFuZyB0aG/DoW5nLCBsxrDhu5tpIGzhu5NuZyBraMOtdC5cbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcubWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG1hcmdpbjogY29uZmlnLm1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID4gMCAmJiBjb25maWcubmVzdGVkTWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG1hcmdpbjogY29uZmlnLm5lc3RlZE1hcmdpbiB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID4gMCAmJiBjb25maWcubmVzdGVkUm93SGVpZ2h0ICE9PSB1bmRlZmluZWQgPyB7IGZpeGVkUm93SGVpZ2h0OiBjb25maWcubmVzdGVkUm93SGVpZ2h0IH0gOiB7fSksXG4gICAgICAuLi4oZGVwdGggPT09IDAgJiYgY29uZmlnLm91dGVyTWFyZ2luICE9PSB1bmRlZmluZWQgPyB7IG91dGVyTWFyZ2luOiBjb25maWcub3V0ZXJNYXJnaW4gfSA6IHt9KSxcbiAgICAgIC4uLihkZXB0aCA9PT0gMCAmJiBjb25maWcub3V0ZXJNYXJnaW5Cb3R0b20gIT09IHVuZGVmaW5lZCA/IHsgb3V0ZXJNYXJnaW5Cb3R0b206IGNvbmZpZy5vdXRlck1hcmdpbkJvdHRvbSB9IDoge30pLFxuICAgICAgLi4uKGRlcHRoID09PSAwICYmIGNvbmZpZy5vdXRlck1hcmdpblRvcCAhPT0gdW5kZWZpbmVkID8geyBvdXRlck1hcmdpblRvcDogY29uZmlnLm91dGVyTWFyZ2luVG9wIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLm1pbkl0ZW1Sb3dzICE9PSB1bmRlZmluZWQgPyB7IG1pbkl0ZW1Sb3dzOiBjb25maWcubWluSXRlbVJvd3MgfSA6IHt9KSxcbiAgICAgIC4uLihjb25maWcuZGVmYXVsdEl0ZW1Db2xzICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRJdGVtQ29sczogY29uZmlnLmRlZmF1bHRJdGVtQ29scyB9IDoge30pLFxuICAgICAgLi4uKGNvbmZpZy5kZWZhdWx0SXRlbVJvd3MgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdEl0ZW1Sb3dzOiBjb25maWcuZGVmYXVsdEl0ZW1Sb3dzIH0gOiB7fSksXG5cbiAgICAgIC8vIPCflLQgQ2jhur8gxJHhu5kgWEVNIHBo4bqjaSBU4bquVCBo4bqzbiBrw6lvIHbDoCDEkeG7lWkga8OtY2ggdGjGsOG7m2MuXG4gICAgICAvLyBgYmFzZWAgbHXDtG4gxJHhu4MgYGVuYWJsZWQ6IHRydWVgOyBraMO0bmcgZ2hpIMSRw6ggdGhlbyBgZWRpdE1vZGVgIHRow6wgbmfGsOG7nWkgeGVtIHbhuqtuIGvDqW8gxJHGsOG7o2Mga2jhu5FpXG4gICAgICAvLyB2w6AgxJHhu5VpIGLhu5EgY+G7pWMgY+G7p2EgbmfGsOG7nWkga2jDoWMgKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNjogXCLEkWFuZyB4ZW0gbcOgIHbhuqtuIGvDqW8gdGjhuqMgdGhheSDEkeG7lWlcbiAgICAgIC8vIHbhu4sgdHLDrSB2w6AgdGjDqm0ga2jhu5FpIMSRxrDhu6NjXCIpLlxuICAgICAgZHJhZ2dhYmxlOiB7IC4uLmJhc2UuZHJhZ2dhYmxlLCBlbmFibGVkOiBjYW5FZGl0IH0sXG4gICAgICByZXNpemFibGU6IHsgLi4uYmFzZS5yZXNpemFibGUsIGVuYWJsZWQ6IGNhbkVkaXQgfSxcblxuICAgICAgLy8gQ2jhur8gxJHhu5kgdOG7sSBkbyBMVcOUTiBjaG8gY2jhu5NuZzsgY2jhur8gxJHhu5kgbMaw4bubaSB0aMOsIHRoZW8gY+G7nSBj4bunYSBuxqFpIGTDuW5nLlxuICAgICAgYWxsb3dNdWx0aUxheWVyOiBjYW5PdmVybGFwLFxuICAgICAgLy8g8J+UtCBC4bqtdCBgYWxsb3dNdWx0aUxheWVyYCBN4buYVCBNw4xOSCBraMO0bmcgxJHhu6cuIE3DoyBsaWIgc28gYGxheWVySW5kZXhgIGPhu6dhIGhhaSBraOG7kWk6IEtIw4FDIG5oYXVcbiAgICAgIC8vIHRow6wgY2hvIMSRw6gsIEdJ4buQTkcgbmhhdSB24bqrbiBiw6FvIHZhIGNo4bqhbS4gS2jhu5FpIGtow7RuZyBraGFpIGBsYXllckluZGV4YCDEkeG7gXUgcsahaSB24buBXG4gICAgICAvLyBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBjw7luZyBs4bubcCwgdsOgIHbhuqtuIGLhu4sgxJHhuql5IG5oYXUgbmjGsCBsxrDhu5tpIHRoxrDhu51uZyAobmfGsOG7nWkgZMO5bmcgYsOhb1xuICAgICAgLy8gMjgvMDgvMjAyNjogXCJi4bqtdCBjaOG7k25nIGto4buRaSBuaMawbmcga2hpIGvDqW8gdGjDrCBjw6FjIGto4buRaSB24bqrbiBkaSBjaHV54buDbiB0aGVvXCIpLlxuICAgICAgLy8gQ2hvIGNo4buTbmcgdGjDrCBwaOG6o2kgVOG6rlQgxJHhuql5IGto4buRaSwgbuG6v3Uga2jDtG5nIGto4buRaSBi4buLIGThuqF0IMSRaSB0csaw4bubYyBraGkga+G7i3AgxJHDqCBsw6puIG5oYXUuXG4gICAgICAuLi4oY2FuT3ZlcmxhcCA/IHsgcHVzaEl0ZW1zOiBmYWxzZSwgcHVzaFJlc2l6ZUl0ZW1zOiBmYWxzZSwgc3dhcDogZmFsc2UsIHN3YXBXaGlsZURyYWdnaW5nOiBmYWxzZSB9IDoge30pLFxuXG4gICAgICAuLi50aGlzLmJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZSwgZGVwdGgpLFxuXG4gICAgICBpdGVtQ2hhbmdlQ2FsbGJhY2s6IChpdGVtOiBHcmlkc3Rlckl0ZW0pID0+IHtcbiAgICAgICAgLy8g8J+UtCBLaOG7kWkgduG7q2EgdGhhbyB0w6FjIHBo4bqjaSBsw6puIEzhu5pQIFRSw4pOIEPDmU5HLlxuICAgICAgICAvLyBgbGF5ZXJJbmRleGAgZ8OhbiBt4buZdCBs4bqnbiB0aGVvIHRo4bupIHThu7EgY8OieSBsw7pjIGto4bufaSB04bqhbywgbsOqbiBraOG7kWkga8OpbyBsw6puIGNo4buJIG7hu5VpIFRST05HIEzDmkNcbiAgICAgICAgLy8ga8OpbyAobmjhu50gYHotaW5kZXg6IDMwYCBj4bunYSBs4bubcCBgZ3JpZHN0ZXItaXRlbS1tb3ZpbmdgKTsgdGjhuqMgdGF5IHJhIGzDoCB24buBIGzhu5twIGPFqSB2w6AgYuG7iyBraOG7kWlcbiAgICAgICAgLy8gxJHhu6luZyBzYXUgdHJvbmcgY8OieSDEkcOoIG5nxrDhu6NjIGzDqm4gKG5nxrDhu51pIGTDuW5nIGLDoW8gMjgvMDgvMjAyNiwgxJFvIMSRxrDhu6NjOiBrw6lvIHo9MzAsIHRo4bqjIHbhu4FcbiAgICAgICAgLy8gej0xMCB0cm9uZyBraGkgaGFpIGto4buRaSBr4bq/IGLDqm4gxJFhbmcgej0xMSB2w6Agej0xMikuXG4gICAgICAgIGlmIChjYW5PdmVybGFwKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZVRvVG9wTGF5ZXIoaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gICAgICAgIGl0ZW1DaGFuZ2VDYWxsYmFjaz8uKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQuG6r3QgbMaw4bubaSBM4buSTkcgxJFvIGzhuqFpIE5HQVkga2hpIGtodW5nIGNo4bupYSBuw7MgxJHhu5VpIGLhu4EgcuG7mW5nIOKAlCBkw7luZyBsw7pjIG5nxrDhu51pIGTDuW5nIGvDqW8gbcOpcCBraOG7kWkgY2hhLlxuICAgKlxuICAgKiBHcmlkc3RlciBjw7Mgc+G6tW4gxJHGsOG7nW5nIHThu7EgxJFvIChgcmVzaXplJGApLCBuaMawbmcgbHXhu5NuZyDEkcOzIGzDoCBgc3dpdGNoTWFwKCgpID0+IHRpbWVyKDEwMCkpYDogbeG7l2lcbiAgICogbOG6p24gcGjDoXQgbOG6oWkgaHXhu7cgdGltZXIgdHLGsOG7m2MsIG3DoCBrw6lvIGNodeG7mXQgYuG6r24gZMOgeSBoxqFuIDEwMG1zIG7Dqm4gdGltZXIga2jDtG5nIGJhbyBnaeG7nSB04bubaSDEkcOtY2guXG4gICAqIMSQbyDEkcaw4bujYyAoMTEvMDkvMjAyNik6IGvDqW8gbcOpcCBuaMOzbSB0aMOsIGzGsOG7m2kgY29uIGNvIHRoZW8gY2hhIHThu6tuZyBraHVuZyBow6xuaCAoMjM0IOKGkiAzODQgcHgpIGPDsm5cbiAgICogVEjhurogY29uIMSR4bupbmcgaW0g4bufIDEwNiBweCBzdeG7kXQgY8O6IGvDqW8sIGNo4buJIG5o4bqjeSDEkcO6bmcgc2F1IGtoaSB0aOG6oyB0YXkuXG4gICAqXG4gICAqIEdp4buvIEPhuqIgSEFJIMSRxrDhu51uZzogYGl0ZW1SZXNpemVDYWxsYmFja2AgYuG6r24gxJHhu5NuZyBi4buZIG5nYXkga2hpIGdyaWRzdGVyIGdoaSBi4buBIHLhu5luZyBt4bubaSBsw6puIGto4buRaVxuICAgKiAoc+G7m20gaMahbiBgUmVzaXplT2JzZXJ2ZXJgIG3hu5l0IGtodW5nIGjDrG5oKSBsbyDEkeG7mSB04bupYyB0aMOsOyBgUmVzaXplT2JzZXJ2ZXJgIGxvIG5o4buvbmcgbOG6p24ga2h1bmcgxJHhu5VpXG4gICAqIHbDrCBsw70gZG8ga2jDoWMg4oCUIMSR4buVaSB6b29tLCB0aHUgZ+G7jW4gY+G7mXQgYsOqbiB0csOhaS5cbiAgICpcbiAgICogVOG6r3QgYuG6sW5nIGBjb25maWcuYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzOiBmYWxzZWAuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTmVzdGVkUmVzaXplSG9va3MoYmFzZTogR3JpZHN0ZXJDb25maWcsIGRlcHRoOiBudW1iZXIpOiBQYXJ0aWFsPEdyaWRzdGVyQ29uZmlnPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5hdXRvUmVzaXplTmVzdGVkR3JpZHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGdvY0l0ZW1SZXNpemUgPSBiYXNlLml0ZW1SZXNpemVDYWxsYmFjaztcbiAgICBjb25zdCBnb2NJbml0ID0gYmFzZS5pbml0Q2FsbGJhY2s7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbVJlc2l6ZUNhbGxiYWNrOiAoaXRlbSwgaXRlbUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBnb2NJdGVtUmVzaXplPy4oaXRlbSwgaXRlbUNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGVsID0gKGl0ZW1Db21wb25lbnQgYXMgeyBlbD86IEhUTUxFbGVtZW50IH0gfCB1bmRlZmluZWQpPy5lbDtcblxuICAgICAgICBlbD8ucXVlcnlTZWxlY3RvckFsbCgnZ3JpZHN0ZXInKS5mb3JFYWNoKChuZXN0ZWQpID0+IHRoaXMucmVzaXplR3JpZHN0ZXJFbGVtZW50KG5lc3RlZCBhcyBIVE1MRWxlbWVudCkpO1xuICAgICAgfSxcbiAgICAgIC4uLihkZXB0aCA+IDBcbiAgICAgICAgPyB7IGluaXRDYWxsYmFjazogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdGhpcy5yZWdpc3Rlck5lc3RlZEdyaWQoZ3JpZHN0ZXIsIGdvY0luaXQpIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBH4buNaSBgcmVzaXplKClgIGPhu6dhIG3hu5l0IHRo4bq7IGA8Z3JpZHN0ZXI+YCBxdWEgY2jDrW5oIGluc3RhbmNlIG3DoCBuw7MgdOG7sSBn4bqvbiBsw6puIHBo4bqnbiB04butLiAqL1xuICBwcml2YXRlIHJlc2l6ZUdyaWRzdGVyRWxlbWVudChuZXN0ZWQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgZ2l1SW5zdGFuY2UgPSBuZXN0ZWQgYXMgdW5rbm93biBhcyB7IF9fZ3JpZHN0ZXJJbnN0YW5jZT86IHsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IH07XG5cbiAgICBnaXVJbnN0YW5jZS5fX2dyaWRzdGVySW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBH4bqvbiBpbnN0YW5jZSBsw6puIGNow61uaCBwaOG6p24gdOG7rSBgPGdyaWRzdGVyPmAgcuG7k2kgdGhlbyBkw7VpIGLhu4EgcuG7mW5nIGPhu6dhIG7Dsy5cbiAgICpcbiAgICogUGjhuqNpIGfhuq9uIG5nxrDhu6NjIGzDqm4gRE9NIHbDrCBgaXRlbVJlc2l6ZUNhbGxiYWNrYCBj4bunYSBraOG7kWkgQ0hBIGNo4buJIGPhuqdtIMSRxrDhu6NjIGBIVE1MRWxlbWVudGAsIGtow7RuZyBjw7NcbiAgICogxJHGsOG7nW5nIG7DoG8ga2jDoWMgxJFpIHThu6sgxJHDsyB24buBIGluc3RhbmNlIGPhu6dhIGzGsOG7m2kgbOG7k25nIGLDqm4gdHJvbmcuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyTmVzdGVkR3JpZChcbiAgICBncmlkc3RlcjogR3JpZHN0ZXJDb21wb25lbnRJbnRlcmZhY2UsXG4gICAgZ29jPzogKGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBnb2M/Lihncmlkc3Rlcik7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBncmlkc3RlciBhcyB1bmtub3duIGFzIHsgZWw/OiBIVE1MRWxlbWVudDsgb3B0aW9ucz86IHsgYXBpPzogeyByZXNpemU/OiAoKSA9PiB2b2lkIH0gfSB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVsID0gaW5zdGFuY2U/LmVsO1xuXG4gICAgaWYgKCFlbCB8fCB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChlbCBhcyB1bmtub3duIGFzIHsgX19ncmlkc3Rlckluc3RhbmNlPzogdW5rbm93biB9KS5fX2dyaWRzdGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgIGNvbnN0IHRoZW9Eb2kgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gaW5zdGFuY2U/Lm9wdGlvbnM/LmFwaT8ucmVzaXplPy4oKSk7XG5cbiAgICB0aGVvRG9pLm9ic2VydmUoZWwpO1xuICAgIHRoaXMubmVzdGVkUmVzaXplT2JzZXJ2ZXJzLmFkZCh0aGVvRG9pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBH4bqvbiBjb21wb25lbnQgY+G7p2EgbsahaSBkw7luZyBsw6puIG3hu5l0IGto4buRaS5cbiAgICpcbiAgICogQHBhcmFtIGhvc3QgY2jhu5cgZ+G6r24gUknDik5HIGPhu6dhIMO0IMSRw7Mg4oCUIG3hu5dpIGto4buRaSBt4buZdCBgVmlld0NvbnRhaW5lclJlZmAsIGTDuW5nIGNodW5nIG3hu5l0IGPDoWkgdGjDrFxuICAgKiAgIG3hu41pIGNvbXBvbmVudCBi4buLIGThu5NuIGjhur90IHbDoG8gbeG7mXQgw7QuXG4gICAqIEBwYXJhbSBjaGlsZENhbnZhcyBraHXDtG4gbeG6t3QgcGjhurNuZyBM4buSTkcgY+G7p2Ega2jhu5FpLCBjaOG7iSBjw7MgduG7m2kga2jhu5FpIGNvbnRhaW5lciB04buxIGtoYWlcbiAgICogICBgZ2V0Q29tcG9uZW50T3V0bGV0YC4gQ29tcG9uZW50IHbhu48gbmjhuq1uIG7DsyBxdWEgaW5wdXQgYGNoaWxkQ2FudmFzYCB2w6AgdOG7sSDEkeG6t3QgdsOgbyBnaeG7r2EgdGnDqnUgxJHhu4FcbiAgICogICB24bubaSBwaOG6p24gdGjDom4gY+G7p2EgbcOsbmguIEtow7RuZyB0cnV54buBbiB4deG7kW5nIHRow6wgduG7jyBjaGnhur9tIHRy4buNbiBjaGnhu4F1IGNhbyBraOG7kWkgdsOgIMSR4bqpeSB0b8OgbiBi4buZIHRo4bq7XG4gICAqICAgY29uIHJhIG5nb8OgaSB2w7luZyBuaMOsbiB0aOG6pXkuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaE5vZGUoXG4gICAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUsXG4gICAgZGVwdGg6IG51bWJlcixcbiAgICBob3N0OiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGNoaWxkQ2FudmFzPzogVGVtcGxhdGVSZWY8dW5rbm93bj5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jb21wb25lbnRSZWZzLmdldChub2RlLmlkKTtcblxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5hcHBseUlucHV0cyhleGlzdGluZywgbm9kZSwgZGVwdGgsIGNoaWxkQ2FudmFzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEto4buRaSB04buxIGtoYWkgdGjDrCBo4buPaSBuw7M7IGtow7RuZyB0aMOsIGjhu49pIGjDoG0gcGjDom4gZ2nhuqNpIGNodW5nLiBD4bqjIGhhaSDEkeG7gXUgbmjhuq1uIGBub2RlYCDEkeG7gyDEkeG7jWNcbiAgICAvLyDEkcaw4bujYyBgZGF0YS50eXBlYCBtw6AgcXV54bq/dCDEkeG7i25oIHRy4bqjIGNvbXBvbmVudCBuw6BvLlxuICAgIGNvbnN0IHN0cmVhbSA9IChub2RlLmdldENvbXBvbmVudE91dGxldCA/PyBjb25maWcuZ2V0Q29tcG9uZW50T3V0bGV0KT8uKG5vZGUpO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDwn5S0IEh14bu3IGzGsOG7o3QgdOG6o2kgQ8WoIGPhu6dhIMSRw7puZyBraOG7kWkgbsOgeSB0csaw4bubYyBraGkgbeG7nyBsxrDhu6N0IG3hu5tpLlxuICAgIC8vIEto4buRaSBi4buLIGfhu6EgcuG7k2kgZ+G6r24gbOG6oWkgKMSR4buVaSBi4buRIGPhu6VjLCBz4bqvcCBn4buNbikgdHJvbmcgbMO6YyBgaW1wb3J0KClgIGNoxrBhIHhvbmcgdGjDrCBsxrDhu6N0IGPFqSB24bqrblxuICAgIC8vIGNo4bqheSB0aeG6v3AgdsOgIGThu7FuZyBjb21wb25lbnQgdsOgbyBt4buZdCBgVmlld0NvbnRhaW5lclJlZmAgxJHDoyBjaOG6v3QuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZ2V0KG5vZGUuaWQpPy51bnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3Qgc3ViID0gc3RyZWFtLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjb21wb25lbnRUeXBlKSA9PiB7XG4gICAgICB0aGlzLnBlbmRpbmdMb2Fkcy5kZWxldGUobm9kZS5pZCk7XG5cbiAgICAgIC8vIEto4buRaSBjw7MgdGjhu4MgxJHDoyBi4buLIHhvw6EgdHJvbmcgbMO6YyBjaOG7nSB04bqjaSDigJQgZOG7sW5nIHbDoG8gxJHDonkgbMOgIHLDsiBy4buJLlxuICAgICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlLmZpbmRCeUlkKHRoaXMucm9vdE5vZGUoKSA/PyBub2RlLCBub2RlLmlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZiA9IGhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuXG4gICAgICB0aGlzLmFwcGx5SW5wdXRzKHJlZiwgbm9kZSwgZGVwdGgsIGNoaWxkQ2FudmFzKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmcy5zZXQobm9kZS5pZCwgcmVmKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLnNldChub2RlLmlkLCBzdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEfhu6EgY29tcG9uZW50IGPhu6dhIG3hu5l0IGto4buRaSB2w6AgaHXhu7cgbsOzLiAqL1xuICBwcml2YXRlIGRldGFjaE5vZGUobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBLaOG7kWkgYuG7iyBn4buhIGtoaSBjb21wb25lbnQgY+G7p2EgbsOzIGPDsm4gxJFhbmcgdOG6o2kg4oCUIHBo4bqjaSBodeG7tyBsxrDhu6N0IHThuqNpLCBraMO0bmcgdGjDrCBuw7MgZOG7sW5nIHbDoG8gbeG7mXRcbiAgICAvLyBgVmlld0NvbnRhaW5lclJlZmAgxJHDoyBjaOG6v3QuXG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZ2V0KG5vZGVJZCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wZW5kaW5nTG9hZHMuZGVsZXRlKG5vZGVJZCk7XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLmNvbXBvbmVudFJlZnMuZ2V0KG5vZGVJZCk7XG5cbiAgICBpZiAoIXJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmRlbGV0ZShub2RlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMucGVuZGluZ0xvYWRzLnZhbHVlcygpKSB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLmNvbXBvbmVudFJlZnMudmFsdWVzKCkpIHtcbiAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvYnNlcnZlciBvZiB0aGlzLm5lc3RlZFJlc2l6ZU9ic2VydmVycykge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0xvYWRzLmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy5uZXN0ZWRSZXNpemVPYnNlcnZlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBOaMOzbSBow6BtIGNobyBuxqFpIGTDuW5nIENI4bumIMSQ4buYTkcgZ+G7jWkg4oCUIGtow7RuZyBwaOG6o2kgY2jhu50gbmfGsOG7nWkgZMO5bmcgYuG6pW0gbsO6dCB0csOqbiBraOG7kWkuXG4gIC8vIFPhu61hIGPDonkgdGjDrCBkw7luZyB0aOG6s25nIGBUcmVlU2VydmljZWAgcuG7k2kgZ+G7jWkgYHJlZnJlc2goKWAg4oCUIHhlbSBkZW1vIHRyb25nIGNvcmUtdWkuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCw6FvIGNobyBzZXJ2aWNlIGJp4bq/dCBjw6J5IHbhu6thIMSR4buVaSB04burIGLDqm4gbmdvw6BpICh0aMOqbS94b8OhIGto4buRaSwgc+G6r3AgZ+G7jW4sIG7huqFwIGLhu5EgY+G7pWMga2jDoWMpLlxuICAgKlxuICAgKiDwn5S0IFBI4bqiSSB0aGF5IFRIQU0gQ0hJ4bq+VSBj4bunYSBub2RlIGfhu5FjLCBraMO0bmcgY2jhu4kgYsahbSBgdmVyc2lvbmAuXG4gICAqIGBAZm9yIOKApiB0cmFjayBpdGVtLmlkYCBnaeG7ryBuZ3V5w6puIG9iamVjdCBraGkgaWQga2jDtG5nIMSR4buVaSwgbsOqbiBgPGdyaWRzdGVyLWl0ZW0gW2l0ZW1dPVwi4oCmXCI+YCB24bqrblxuICAgKiBuaOG6rW4gxJHDum5nIG9iamVjdCBjxakgdsOgIGdyaWRzdGVyIGtow7RuZyBo4buBIGJp4bq/dCBgeC95L2NvbHMvcm93cy9sYXllckluZGV4YCB24burYSBi4buLIHPhu61hLiBCxqFtIG3hu5dpXG4gICAqIGB2ZXJzaW9uYCB0aMOsIGNvbXB1dGVkIGNo4bqheSBs4bqhaSBuaMawbmcgdHLhuqMgduG7gSBDw5lORyBt4bqjbmcgY8WpIOKAlCBsxrDhu5tpIMSR4bupbmcgaW0gKMSRbyAyOC8wOC8yMDI2OiBi4bqlbVxuICAgKiBcIlPhuq9wIGfhu41uXCIgY8OieSDEkcOjIGThu5NuIGtow610IG3DoCBtw6BuIGjDrG5oIGtow7RuZyBuaMO6YyBuaMOtY2g7IGLhuq10IGNo4buTbmcga2jhu5FpIG3DoCBgJGl0ZW0ubGF5ZXJJbmRleGBcbiAgICogduG6q24gdHLhu5FuZykuXG4gICAqXG4gICAqIE5ow6JuIGLhuqNuIE7DlE5HIGPhuqMgbm9kZSBn4buRYyB2w6AgZGFuaCBzw6FjaCBjb24gbMOgIMSR4bunOiBt4bqjbmcgbeG7m2kg4oaSIGBAZm9yYCBk4buxbmcgbOG6oWkgaXRlbSwgb2JqZWN0IGNvblxuICAgKiBt4bubaSDihpIgZ3JpZHN0ZXIgxJHhu41jIGzhuqFpIHRvw6BuIGLhu5kgdG/huqEgxJHhu5kuXG4gICAqL1xuICByZWZyZXNoKGV2ZW50PzogVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IGV2ZW50Py5yb290ID8/IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgdGhpcy52ZXJzaW9uLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIGRhdGE6IHJvb3QgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3ROb2RlLnNldCh0aGlzLnNoYWxsb3dDbG9uZVRyZWUocm9vdCkpO1xuICAgIHRoaXMudmVyc2lvbi51cGRhdGUoKHYpID0+IHYgKyAxKTtcbiAgfVxuXG4gIC8qKiBOaMOibiBi4bqjbiBuw7RuZyB0aGVvIGPhuqMgY2hp4buBdSBzw6J1OiBt4buXaSBub2RlIHbDoCBt4bqjbmcgYGNoaWxkcmVuYCB0aMOgbmggdGhhbSBjaGnhur91IG3hu5tpLiAqL1xuICAvKipcbiAgICogTmjDom4gYuG6o24gU8OCVSBj4bqjIGPDonkg4oCUIGTDuW5nIGNobyBgZXhwb3J0TGF5b3V0KClgLlxuICAgKlxuICAgKiDwn5S0IELhu44gYGdldENvbXBvbmVudE91dGxldGAga2jhu49pIGLhuqNuIHNhbzogbsOzIGzDoCBt4buZdCBIw4BNLCBraMO0bmcgdHXhuqduIHThu7EgaG/DoSDEkcaw4bujYyBuw6puIGfhu61pIHh14buRbmdcbiAgICogYmFja2VuZCBsw6AgaOG7j25nIChgSlNPTi5zdHJpbmdpZnlgIG514buRdCBt4bqldCwgYHN0cnVjdHVyZWRDbG9uZWAgbsOpbSBs4buXaSkuIE7huqFwIGzhuqFpIHRow6wgaMOgbSBwaMOiblxuICAgKiBnaeG6o2kgY2h1bmcgY+G7p2EgY+G6pXUgaMOsbmggbG8g4oCUIGNvbXBvbmVudCBzdXkgcmEgdOG7qyBgZGF0YS50eXBlYCwga2jDtG5nIGPhuqduIGzGsHUuXG4gICAqL1xuICBwcml2YXRlIGRlZXBDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgY29uc3QgY29weTogVF9ncmlkTGF5b3V0X25vZGUgPSB7IC4uLm5vZGUgfTtcblxuICAgIC8vIEPhuq90IGjDoG0gcGjDom4gZ2nhuqNpIOKAlCB4ZW0gY2jDuiB0aMOtY2ggdHLDqm4uXG4gICAgZGVsZXRlIGNvcHkuZ2V0Q29tcG9uZW50T3V0bGV0O1xuXG4gICAgY29uc3QgeyBjaGlsZHJlbiwgZGF0YSwgLi4ucmVzdCB9ID0gY29weTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN0LFxuICAgICAgLi4uKGRhdGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBkYXRhOiBjbG9uZURlZXAoZGF0YSkgfSksXG4gICAgICAuLi4oY2hpbGRyZW4gPyB7IGNoaWxkcmVuOiBjaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLmRlZXBDbG9uZVRyZWUoY2hpbGQpKSB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNoYWxsb3dDbG9uZVRyZWUobm9kZTogVF9ncmlkTGF5b3V0X25vZGUpOiBUX2dyaWRMYXlvdXRfbm9kZSB7XG4gICAgaWYgKCFub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IC4uLm5vZGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5ub2RlLCBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLnNoYWxsb3dDbG9uZVRyZWUoY2hpbGQpKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEfDoW4gYGxheWVySW5kZXhgIGtow6FjIG5oYXUgY2hvIHThu6tuZyBraOG7kWkga2hpIGLhuq10IGNo4buTbmcga2jhu5FpLlxuICAgKlxuICAgKiDwn5S0IGBhbGxvd011bHRpTGF5ZXI6IHRydWVgIE3hu5hUIE3DjE5IIGtow7RuZyBjaG8ga2jhu5FpIMSRw6ggbmhhdS4gTcOjIGxpYiBzbyBgbGF5ZXJJbmRleGAgY+G7p2EgaGFpIGto4buRaTpcbiAgICogS0jDgUMgbmhhdSB0aMOsIGNobyDEkcOoLCBHSeG7kE5HIG5oYXUgduG6q24gYsOhbyB2YSBjaOG6oW0uIEto4buRaSBraMO0bmcga2hhaSBgbGF5ZXJJbmRleGAgxJHhu4F1IHLGoWkgduG7gVxuICAgKiBgZGVmYXVsdExheWVySW5kZXhgIOKAlCB04bupYyBDw5lORyBs4bubcCwgbsOqbiBrw6lvIHbDoG8gbmhhdSBsw6AgYuG7iyBjaOG6t24geSBuaMawIGzGsOG7m2kgdGjGsOG7nW5nIChuZ8aw4budaSBkw7luZ1xuICAgKiBiw6FvIDI4LzA4LzIwMjY6IFwiYuG6rXQgY2jhu5NuZyBraOG7kWkgbmjGsG5nIGtoaSBrw6lvIHRow6wgY8OhYyBraOG7kWkgduG6q24gZGkgY2h1eeG7g24gdGhlb1wiKS5cbiAgICpcbiAgICogTsahaSBkw7luZyB04buxIGtoYWkgYGxheWVySW5kZXhgIHRow6wgZ2nhu68gbmd1ecOqbjsgYWkga2jDtG5nIGtoYWkgdGjDrCB0aMawIHZp4buHbiB44bq/cCBt4buXaSBraOG7kWkgbeG7mXQgbOG7m3BcbiAgICogdGhlbyB0aOG7qSB04buxLCDEkeG7pyDEkeG7gyBt4buNaSBj4bq3cCDEkeG7gXUga2jDoWMgbOG7m3AuXG4gICAqL1xuICBwcml2YXRlIGFzc2lnbk92ZXJsYXBMYXllcnMocm9vdDogVF9ncmlkTGF5b3V0X25vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjYW5PdmVybGFwID0gY29uZmlnPy5tb2RlID09PSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcuZnJlZSB8fCAoY29uZmlnPy5hbGxvd092ZXJsYXAgPz8gZmFsc2UpO1xuXG4gICAgaWYgKCFjYW5PdmVybGFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxheWVyID0gMDtcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxheWVyICs9IDE7XG4gICAgICAgICAgY2hpbGQubGF5ZXJJbmRleCA9IGxheWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FsayhjaGlsZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhbGsocm9vdCk7XG5cbiAgfVxuXG4gIC8qKiDEkMawYSBt4buZdCBraOG7kWkgbMOqbiB0csOqbiB04bqldCBj4bqjOiBs4bubcCBj4bunYSBuw7MgPSBs4bubcCBs4bubbiBuaOG6pXQgxJFhbmcgY8OzICsgMS4gKi9cbiAgcHJpdmF0ZSByYWlzZVRvVG9wTGF5ZXIoaXRlbTogR3JpZHN0ZXJJdGVtKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIGlmICghcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0b3BMYXllciA9IDA7XG4gICAgY29uc3Qgd2FsayA9IChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICAgIHRvcExheWVyID0gTWF0aC5tYXgodG9wTGF5ZXIsIGNoaWxkLmxheWVySW5kZXggPz8gMCk7XG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YWxrKHJvb3QpO1xuXG4gICAgLy8gYGl0ZW1gIGdyaWRzdGVyIHRy4bqjIHbhu4EgQ0jDjU5IIGzDoCBvYmplY3Qgbm9kZSBj4bunYSBjw6J5ICh0cnV54buBbiB0aOG6s25nIHF1YSBgW2l0ZW1dYCksIG7Dqm4gZ8OhbiB2w6BvXG4gICAgLy8gxJHDonkgbMOgIGPDonkgY8WpbmcgxJHhu5VpIHRoZW8uXG4gICAgY29uc3Qgbm9kZSA9IGl0ZW0gYXMgdW5rbm93biBhcyBUX2dyaWRMYXlvdXRfbm9kZTtcblxuICAgIGlmIChub2RlLmxheWVySW5kZXggPT09IHRvcExheWVyKSB7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLmxheWVySW5kZXggPSB0b3BMYXllciArIDE7XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gU+G7rEEgQ8OCWSDigJQgdGjGsCB2aeG7h24gxJHDoyBnaeG7ryBjw6J5IG7Dqm4gYuG6oW4gS0jDlE5HIHBo4bqjaSB0cnV54buBbiBuw7MgdsOgby5cbiAgLy8gTeG7jWkgaMOgbSBkxrDhu5tpIMSRw6J5IHThu7EgduG6vSBs4bqhaTsga2jDtG5nIGPhuqduIGfhu41pIGByZWZyZXNoKClgLlxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogVGjDqm0gbeG7mXQga2jhu5FpLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBraOG7kWkgbeG7m2kg4oCUIEtIw5RORyBj4bqnbiBgaWRgICh0aMawIHZp4buHbiBzaW5oKSB2w6AgYHhgL2B5YCAodOG7sSDEkeG6t3QgeHXhu5FuZyBow6BuZyB0cuG7kW5nKS5cbiAgICogQHBhcmFtIHBhcmVudElkIGNvbnRhaW5lciBtdeG7kW4gdGjDqm0gdsOgbzsgYuG7jyB0cuG7kW5nIHRow6wgdGjDqm0gdsOgbyBt4bq3dCBwaOG6s25nIGfhu5FjLlxuICAgKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB24burYSBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgY29udGFpbmVyLlxuICAgKi9cbiAgYWRkQmxvY2soaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUsIHBhcmVudElkPzogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3ROb2RlKCk7XG4gICAgY29uc3QgYWRkZWQgPSByb290ID8gdGhpcy50cmVlU2VydmljZS5hZGRDaGlsZChyb290LCBwYXJlbnRJZCA/PyByb290LmlkLCBpdGVtKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIG3hu5l0IGto4buRaSB04bqhaSB0b+G6oSDEkeG7mSAoY29sLCByb3cpIGPhu6UgdGjhu4MgdsOgIHThu7EgxJHhu5luZyDEkeG6qXkgY8OhYyBraOG7kWkgdmEgY2jhuqFtIHh14buRbmcgZMaw4bubaS5cbiAgICovXG4gIGluc2VydEJsb2NrV2l0aENvbGxpc2lvbihcbiAgICBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgICB0YXJnZXRDb2wgPSAwLFxuICAgIHRhcmdldFJvdyA9IDAsXG4gICAgcGFyZW50SWQ/OiBzdHJpbmcsXG4gICk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IGFkZGVkID0gcm9vdFxuICAgICAgPyB0aGlzLnRyZWVTZXJ2aWNlLmluc2VydFdpdGhDb2xsaXNpb24ocm9vdCwgcGFyZW50SWQgPz8gcm9vdC5pZCwgaXRlbSwgdGFyZ2V0Q29sLCB0YXJnZXRSb3cpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChhZGRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEcmFnUGF5bG9hZCA9IHNpZ25hbDx1bmtub3duIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKiDEkOG6t3QgcGF5bG9hZCBraGkgYuG6r3QgxJHhuqd1IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvICh2w60gZOG7pTogcGFsZXR0ZSwgZHJhd2VyKSAqL1xuICBzZXREcmFnUGF5bG9hZChwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQocGF5bG9hZCk7XG4gIH1cblxuICAvKiogTOG6pXkgcGF5bG9hZCDEkWFuZyBrw6lvICovXG4gIGdldERyYWdQYXlsb2FkKCk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZURyYWdQYXlsb2FkKCk7XG4gIH1cblxuICAvKiogWG/DoSBwYXlsb2FkIGtoaSBr4bq/dCB0aMO6YyBrw6lvICovXG4gIGNsZWFyRHJhZ1BheWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVEcmFnUGF5bG9hZC5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaS4gWG/DoSBjb250YWluZXIgbMOgIHhvw6EgY+G6oyBydeG7mXQuIFRy4bqjIGBmYWxzZWAga2hpIGtow7RuZyB4b8OhIMSRxrDhu6NjICh2ZCBraOG7kWkgZ+G7kWMpLiAqL1xuICByZW1vdmVCbG9jayhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlQnlJZChyb290LCBpZCkgOiBmYWxzZTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBT4buRIGPhu5l0IHRo4bqtdCBj4bunYSBsxrDhu5tpIGPhuqVwIHRyYW5nLlxuICAgKlxuICAgKiDwn5S0IE3hurdjIMSR4buLbmggcGjhuqNpIFRSw5lORyBgbWluQ29scy9tYXhDb2xzYCBj4bunYSBgZ3JpZExheW91dFJvb3RDb25maWcoKWAuIFRyxrDhu5tjIMSRw6J5IGNo4buXIG7DoHkgdHLhuqMgMjRcbiAgICogdHJvbmcga2hpIGzGsOG7m2kgduG6vSAxMjogbsahaSBkw7luZyBraMO0bmcgdHJ1eeG7gW4gYGNvbHNgIHRow6wgdmEgY2jhuqFtLCBgdG9Db250YWluZXJgIHbDoCBgY29tcGFjdGAgdMOtbmhcbiAgICogdGhlbyAyNCBj4buZdCBjw7JuIG3DoG4gaMOsbmggY2jhu4kgY8OzIDEyIOKAlCBraOG7kWkgcsahaSByYSBuZ2/DoGkgbcOpcCBwaOG6o2kgbcOgIGtow7RuZyBhaSBoaeG7g3UgdsOsIHNhby5cbiAgICovXG4gIGdldCB0b3RhbENvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmNvbHMgPz8gZ3JpZExheW91dFJvb3RDb25maWcoKS5tYXhDb2xzID8/IDEyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoaeG7gXUgY2FvIG3hu5l0IGjDoG5nIGzGsOG7m2kgKHBpeGVsKSBkw7luZyDEkeG7gyB0w61uaCBraHVuZyB4ZW0gdHLGsOG7m2MgbMO6YyBrw6lvIHRo4bqjLlxuICAgKlxuICAgKiDwn5S0IFBo4bqjaSDEkeG7jWMgdOG7qyBgY29uZmlnLnJvd0hlaWdodGAgY+G7p2EgbsahaSBkw7luZy4gVHLGsOG7m2MgxJHDonkgYGNhbGN1bGF0ZURyb3BHaG9zdGAgxJHDs25nIGPhu6luZyA2OCwgbsOqblxuICAgKiBt4bq3dCBwaOG6s25nIGtoYWkgaMOgbmcgdGjhuqVwIHRow6wga2h1bmcgeGVtIHRyxrDhu5tjIGNhbyBn4bqlcCBuaGnhu4F1IGzhuqduIGto4buRaSB0aOG6rXQg4oCUIG7GoWkgZMO5bmcgcGjhuqNpIOG6qW4ga2h1bmdcbiAgICogY+G7p2EgdGjGsCB2aeG7h24gxJFpIHLhu5NpIHThu7EgduG6vSBs4bqhaS5cbiAgICovXG4gIGdldCByb3dTdGVwUHgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnJvd0hlaWdodCA/PyBncmlkTGF5b3V0Um9vdENvbmZpZygpLmZpeGVkUm93SGVpZ2h0ID8/IDY4O1xuICB9XG5cbiAgLyoqXG4gICAqIEtoZSBOSMOMTiBUSOG6pFkgZ2nhu69hIGhhaSBraOG7kWkgY+G6pXAgZ+G7kWMgKHB4KS4gYDBgID0ga2jDtG5nIMOhcCwgZ2nhu68gxJHDum5nIGjDoG5oIHZpIGPFqS5cbiAgICovXG4gIGdldCB2aXN1YWxHYXBQeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8udmlzdWFsR2FwID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogxJDhu5VpIHPhu5EgY+G7mXQgLyBz4buRIGjDoG5nIGPhu6dhIG3hu5l0IGto4buRaSBy4buTaSB24bq9IGzhuqFpLlxuICAgKlxuICAgKiBLw6lvIGBjb2xzYCBy4buZbmcgcXXDoSBtw6lwIHBo4bqjaSB0aMOsIGThu4tjaCBraOG7kWkgc2FuZyB0csOhaSBjaG8gduG7q2EsIHRoYXkgdsOsIMSR4buDIG7DsyB0csOgbiByYSBuZ2/DoGkgbMaw4bubaS5cbiAgICovXG4gIHJlc2l6ZUJsb2NrKGlkOiBzdHJpbmcsIHNpemU6IHsgY29scz86IG51bWJlcjsgcm93cz86IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEJsb2NrKGlkKTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzaXplLmNvbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9kZS5jb2xzID0gc2l6ZS5jb2xzO1xuICAgICAgaWYgKG5vZGUueCArIHNpemUuY29scyA+IHRoaXMudG90YWxDb2x1bW5zKSB7XG4gICAgICAgIG5vZGUueCA9IE1hdGgubWF4KDAsIHRoaXMudG90YWxDb2x1bW5zIC0gc2l6ZS5jb2xzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5yb3dzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vZGUucm93cyA9IHNpemUucm93cztcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOaMOibiBi4bqjbiBt4buZdCBraOG7kWkg4oCUIMSR4bq3dCBr4bq/IGLDqm4gcGjhuqNpIG7hur91IGPDsm4gY2jhu5csIGtow7RuZyB0aMOsIHh14buRbmcgZMOybmcgZMaw4bubaS5cbiAgICpcbiAgICogYHRyYW5zZm9ybURhdGFgIMSR4buDIG7GoWkgZMO5bmcgxJHhu5VpIHBo4bqnbiBk4buvIGxp4buHdSByacOqbmcgY+G7p2EgbcOsbmggKHZkIG7hu5FpIHRow6ptIFwiKELhuqNuIHNhbylcIiB2w6BvIHRpw6p1XG4gICAqIMSR4buBKTsgdGjGsCB2aeG7h24ga2jDtG5nIHThu7EgxJFvw6FuIHRyxrDhu51uZyBuw6BvIGzDoCB0acOqdSDEkeG7gS5cbiAgICovXG4gIGR1cGxpY2F0ZUJsb2NrKGlkOiBzdHJpbmcsIHRyYW5zZm9ybURhdGE/OiAoZGF0YTogdW5rbm93bikgPT4gdW5rbm93bik6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuICAgIGNvbnN0IG5vZGUgPSByb290ID8gZmluZE5vZGVSZWN1cnNpdmUocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFyb290IHx8ICFub2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBmaW5kUGFyZW50UmVjdXJzaXZlKHJvb3QsIGlkKTtcbiAgICBjb25zdCBpc05lc3RlZCA9IEJvb2xlYW4ocGFyZW50ICYmIHBhcmVudC5pZCAhPT0gcm9vdC5pZCk7XG4gICAgY29uc3QgY2xvbmVkRGF0YSA9IGNsb25lRGVlcChub2RlLmRhdGEpO1xuXG4gICAgbGV0IHRhcmdldFggPSBub2RlLnggKyBub2RlLmNvbHM7XG4gICAgbGV0IHRhcmdldFkgPSBub2RlLnk7XG5cbiAgICBpZiAodGFyZ2V0WCArIG5vZGUuY29scyA+IHRoaXMudG90YWxDb2x1bW5zKSB7XG4gICAgICB0YXJnZXRYID0gMDtcbiAgICAgIHRhcmdldFkgPSBub2RlLnkgKyBub2RlLnJvd3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkQmxvY2soXG4gICAgICB7XG4gICAgICAgIHg6IHRhcmdldFgsXG4gICAgICAgIHk6IHRhcmdldFksXG4gICAgICAgIGNvbHM6IG5vZGUuY29scyxcbiAgICAgICAgcm93czogbm9kZS5yb3dzLFxuICAgICAgICBkYXRhOiB0cmFuc2Zvcm1EYXRhID8gdHJhbnNmb3JtRGF0YShjbG9uZWREYXRhKSA6IGNsb25lZERhdGEsXG4gICAgICAgIGdldENvbXBvbmVudE91dGxldDogbm9kZS5nZXRDb21wb25lbnRPdXRsZXQsXG4gICAgICB9LFxuICAgICAgaXNOZXN0ZWQgPyBwYXJlbnQ/LmlkIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBCaeG6v24ga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVIg4oCUIG7hu5lpIGR1bmcgY8WpIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbiwga2jDtG5nIG3huqV0IGThu68gbGnhu4d1LiAqL1xuICB0b0NvbnRhaW5lcihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9Db250YWluZXIocm9vdCwgaWQsIHRoaXMudG90YWxDb2x1bW5zKSA6IGZhbHNlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgLyoqIMSQxrBhIENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbiDigJQga2jhu5FpIGNvbiDEkcaw4bujYyBuw6JuZyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLiAqL1xuICB0b1NpbmdsZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcbiAgICBjb25zdCBkb25lID0gcm9vdCA/IHRoaXMudHJlZVNlcnZpY2UudG9TaW5nbGUocm9vdCwgaWQpIDogZmFsc2U7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICAvKiogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4sIGzhuqVwIGjhur90IGNo4buXIHRy4buRbmcuIMSQ4buHIHF1eSB2w6BvIGNvbnRhaW5lci4gKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmVlU2VydmljZS5jb21wYWN0KHJvb3QsIHRoaXMudG90YWxDb2x1bW5zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBC4buRIGPhu6VjIEhJ4buGTiBU4bqgSSwgxJHDoyBj4bqvdCBt4buNaSB0aGFtIGNoaeG6v3Ug4oCUIGfhu61pIHRo4bqzbmcgeHXhu5FuZyBiYWNrZW5kIMSRxrDhu6NjLlxuICAgKlxuICAgKiBEw7luZyBraGkgYuG6pW0gbsO6dCBMxrB1LiBLaMOhYyBgUm9vdCgpYCDhu58gY2jhu5cgxJHDonkgbMOgIGLhuqNuIFNBTzogbsahaSBkw7luZyBjw7Mgc+G7rWEgZ8OsIHRyw6puIGvhur90IHF14bqjIGPFqW5nXG4gICAqIGtow7RuZyDEkeG7pW5nIHThu5tpIGPDonkgbcOgIHRoxrAgdmnhu4duIMSRYW5nIHbhur0uXG4gICAqXG4gICAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGtoaSBt4bq3dCBwaOG6s25nIGNoxrBhIGBpbml0KClgLlxuICAgKi9cbiAgZXhwb3J0TGF5b3V0KCk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLmRlZXBDbG9uZVRyZWUocm9vdCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBt4buZdCBraOG7kWkgdGhlbyBpZC4gKi9cbiAgZmluZEJsb2NrKGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdE5vZGUoKTtcblxuICAgIHJldHVybiByb290ID8gdGhpcy50cmVlU2VydmljZS5maW5kQnlJZChyb290LCBpZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVMOsbSBraOG7kWkgY2hhIHRy4buxYyB0aeG6v3AgY+G7p2EgbeG7mXQga2jhu5FpLiAqL1xuICBmaW5kUGFyZW50QmxvY2soaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHJvb3QgPyB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRQYXJlbnQocm9vdCwgaWQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIMSQ4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyBj4bunYSBjYW52YXMgKGvhurlwIGdp4buvYSBtaW4gdsOgIG1heCkuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBU4bu3IGzhu4cgKDAuNCA9IDQwJSwgMS4wID0gMTAwJSwgMS41ID0gMTUwJSlcbiAgICogQHBhcmFtIHBlcnNpc3RLZXkgS2jDs2EgbG9jYWxTdG9yYWdlIMSR4buDIGzGsHUgbOG6oWkgKGLhu48gdHLhu5FuZyB0aMOsIGzhuqV5IHThu6sgY29uZmlnKVxuICAgKi9cbiAgc2V0Wm9vbSh2YWx1ZTogbnVtYmVyLCBwZXJzaXN0S2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IHRoaXMuY29uZmlnPy56b29tTWF4ID8/IDEuNTtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy56b29tTGV2ZWwuc2V0KGNsYW1wZWQpO1xuXG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IHBlcnNpc3RLZXkgPz8gdGhpcy5jb25maWc/LnN0b3JhZ2VLZXk7XG4gICAgaWYgKHN0b3JhZ2VLZXkgJiYgdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIFN0cmluZyhjbGFtcGVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGxvY2FsU3RvcmFnZSBhY2Nlc3MgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZlcnNpb24udXBkYXRlKCh2KSA9PiB2ICsgMSk7XG4gIH1cblxuICAvKiogUGjDs25nIHRvIHRow6ptIG3hu5l0IGLGsOG7m2MgKG3hurdjIMSR4buLbmggMC4wNSB04bupYyA1JSkgKi9cbiAgem9vbUluKHN0ZXA/OiBudW1iZXIsIHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzID0gc3RlcCA/PyB0aGlzLmNvbmZpZz8uem9vbVN0ZXAgPz8gMC4wNTtcbiAgICB0aGlzLnNldFpvb20odGhpcy56b29tTGV2ZWwoKSArIHMsIHBlcnNpc3RLZXkpO1xuICB9XG5cbiAgLyoqIFRodSBuaOG7jyBi4bubdCBt4buZdCBixrDhu5tjICht4bq3YyDEkeG7i25oIDAuMDUgdOG7qWMgNSUpICovXG4gIHpvb21PdXQoc3RlcD86IG51bWJlciwgcGVyc2lzdEtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSBzdGVwID8/IHRoaXMuY29uZmlnPy56b29tU3RlcCA/PyAwLjA1O1xuICAgIHRoaXMuc2V0Wm9vbSh0aGlzLnpvb21MZXZlbCgpIC0gcywgcGVyc2lzdEtleSk7XG4gIH1cblxuICAvKiogxJDhurd0IGzhuqFpIHThu7cgbOG7hyB0aHUgcGjDs25nIGfhu5FjIDEwMCUgKDEuMCkgKi9cbiAgcmVzZXRab29tKHBlcnNpc3RLZXk/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFpvb20oMS4wLCBwZXJzaXN0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4buxIMSR4buZbmcgdMOtbmggdG/DoW4gdsOgIMSR4bq3dCB04bu3IGzhu4cgdGh1IHBow7NuZyDEkeG7gyBjYW52YXMgduG7q2EgduG6t24gduG7m2kgY2hp4buBdSBy4buZbmcgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyV2lkdGggQ2hp4buBdSBy4buZbmcgY29udGFpbmVyIMSRbyDEkcaw4bujYyAocHgpXG4gICAqIEBwYXJhbSBzdGFnZVdpZHRoIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzICht4bq3YyDEkeG7i25oIDE2NjhweClcbiAgICogQHBhcmFtIHBhZGRpbmcgS2hv4bqjbmcgY8OhY2ggbOG7gSBoYWkgYsOqbiAobeG6t2MgxJHhu4tuaCA0OHB4KVxuICAgKiBAcGFyYW0gcGVyc2lzdEtleSBLaMOzYSBsb2NhbFN0b3JhZ2VcbiAgICogQHJldHVybnMgVOG7tyBs4buHIHRodSBwaMOzbmcgduG7q2EgdMOtbmhcbiAgICovXG4gIGZpdFRvU2NyZWVuKGNvbnRhaW5lcldpZHRoOiBudW1iZXIsIHN0YWdlV2lkdGg/OiBudW1iZXIsIHBhZGRpbmcgPSA0OCwgcGVyc2lzdEtleT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0V2lkdGggPSBzdGFnZVdpZHRoID8/IHRoaXMuY29uZmlnPy5zdGFnZVdpZHRoID8/IDE2Njg7XG4gICAgY29uc3QgbWluID0gdGhpcy5jb25maWc/Lnpvb21NaW4gPz8gMC40O1xuICAgIGNvbnN0IG1heCA9IDEuMjU7XG4gICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgTWF0aC5yb3VuZCgoKGNvbnRhaW5lcldpZHRoIC0gcGFkZGluZykgLyB0YXJnZXRXaWR0aCkgKiAxMDApIC8gMTAwKSk7XG4gICAgdGhpcy5zZXRab29tKHJhdGlvLCBwZXJzaXN0S2V5KTtcbiAgICByZXR1cm4gcmF0aW87XG4gIH1cblxuICAvKiogS2nhu4NtIHRyYSB0w61uaCBuxINuZyB0aHUgcGjDs25nIGPDsyDEkcaw4bujYyBj4bqldSBow6xuaCBi4bqtdCBraMO0bmcgKi9cbiAgaXNab29tQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmNvbmZpZz8uZW5hYmxlWm9vbSk7XG4gIH1cblxuICAvKipcbiAgICogQ+G7lW5nIERVWSBOSOG6pFQgY2hvIGNhbnZhcyBj4bunYSB0aMawIHZp4buHbi4gTsahaSBkw7luZyBLSMOUTkcgZ+G7jWkgdOG7m2kgxJHDonkuXG4gICAqXG4gICAqIE3hu41pIHRo4bupIGNhbnZhcyBj4bqnbiDEkeG7gXUgbMOgIGBwcml2YXRlYCDEkeG7gyBraMO0bmcgbOG7jXQgcmEgQVBJIGPDtG5nIGtoYWk7IGdvbSB2w6BvIG3hu5l0IGdldHRlciB0aGVvIMSRw7puZ1xuICAgKiBraHXDtG4gYEZ1bmN0aW9uc0NvbnRyb2xgIGPhu6dhIGLhu5kgcXV5IMaw4bubYywgdGhheSB2w6wgxJHhu4MgcuG6o2kgcsOhYyBow6BtIHB1YmxpYyBtw6AgbmfGsOG7nWkgbmdvw6BpIHTGsOG7n25nXG4gICAqIG3DrG5oIHBo4bqjaSBn4buNaSAobmfGsOG7nWkgZMO5bmcgY2jhu5F0IDI4LzA4LzIwMjYpLlxuICAgKi9cbiAgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1heENvbnRhaW5lckRlcHRoOiAoKSA9PiB0aGlzLm1heENvbnRhaW5lckRlcHRoKCksXG4gICAgICBjb250YWluZXJQYWRkaW5nOiAoKSA9PiB0aGlzLmNvbnRhaW5lclBhZGRpbmcoKSxcbiAgICAgIGlzWm9vbUVuYWJsZWQ6ICgpID0+IHRoaXMuaXNab29tQ29uZmlndXJlZCgpLFxuICAgICAgem9vbTogKCkgPT4gdGhpcy56b29tTGV2ZWwoKSxcbiAgICAgIHNldFpvb206ICh2OiBudW1iZXIsIGtleT86IHN0cmluZykgPT4gdGhpcy5zZXRab29tKHYsIGtleSksXG4gICAgICB6b29tSW46IChzdGVwPzogbnVtYmVyLCBrZXk/OiBzdHJpbmcpID0+IHRoaXMuem9vbUluKHN0ZXAsIGtleSksXG4gICAgICB6b29tT3V0OiAoc3RlcD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLnpvb21PdXQoc3RlcCwga2V5KSxcbiAgICAgIHJlc2V0Wm9vbTogKGtleT86IHN0cmluZykgPT4gdGhpcy5yZXNldFpvb20oa2V5KSxcbiAgICAgIGZpdFRvU2NyZWVuOiAoY1c6IG51bWJlciwgc1c/OiBudW1iZXIsIHBhZD86IG51bWJlciwga2V5Pzogc3RyaW5nKSA9PiB0aGlzLmZpdFRvU2NyZWVuKGNXLCBzVywgcGFkLCBrZXkpLFxuICAgICAgZ3JpZHN0ZXJPcHRpb25zOiAoZGVwdGg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSA9PiB0aGlzLmJ1aWxkR3JpZHN0ZXJPcHRpb25zKGRlcHRoLCBjYiksXG4gICAgICBhdHRhY2hOb2RlOiAobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGRlcHRoOiBudW1iZXIsIGhvc3Q6IFZpZXdDb250YWluZXJSZWYsIGNoaWxkQ2FudmFzPzogVGVtcGxhdGVSZWY8dW5rbm93bj4pID0+XG4gICAgICAgIHRoaXMuYXR0YWNoTm9kZShub2RlLCBkZXB0aCwgaG9zdCwgY2hpbGRDYW52YXMpLFxuICAgICAgZGV0YWNoTm9kZTogKG5vZGVJZDogc3RyaW5nKSA9PiB0aGlzLmRldGFjaE5vZGUobm9kZUlkKSxcbiAgICAgIGdldE5vZGVFbGVtZW50OiAobm9kZUlkOiBzdHJpbmcsIHNjb3BlPzogUGFyZW50Tm9kZSkgPT4gdGhpcy5nZXROb2RlRWxlbWVudChub2RlSWQsIHNjb3BlKSxcbiAgICAgIGdldE5vZGVDYW52YXNFbGVtZW50OiAobm9kZUlkOiBzdHJpbmcsIHNjb3BlPzogUGFyZW50Tm9kZSkgPT4gdGhpcy5nZXROb2RlQ2FudmFzRWxlbWVudChub2RlSWQsIHNjb3BlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRy4bqjIHbhu4EgduG7jyBET00gY+G7p2EgbeG7mXQga2jhu5FpIHRoZW8gYGlkYC5cbiAgICpcbiAgICog8J+UtCBOxqFpIGTDuW5nIGPhuqduIGNo4bqhbSB2w6BvIERPTSBj4bunYSBraOG7kWkgKMSRbyBrw61jaCB0aMaw4bubYywgZ+G6r24gbOG7m3AgcGjhu6cgcmnDqm5nKSBC4bquVCBCVeG7mEMgxJFpIHF1YSDEkcOieS5cbiAgICogVHLGsOG7m2Mga2hpIGPDsyBow6BtIG7DoHksIG7GoWkgZMO5bmcgcGjhuqNpIHThu7Egdmnhur90IGBxdWVyeVNlbGVjdG9yKCcubGlicy11aS1ncmlkLWxheW91dC1ibG9jay1zaGVsbFsuLi5dJylgXG4gICAqIOKAlCB04bupYyBiw6FtIHbDoG8gdMOqbiBjbGFzcyBO4buYSSBC4buYIGPhu6dhIHRoxrAgdmnhu4duOiDEkeG7lWkgdMOqbiBjbGFzcyBsw6AgbcOgbiBiw6puIGtpYSB24buhIElNIEzhurZORywgYmnDqm4gZOG7i2NoXG4gICAqIHbhuqtuIHhhbmggdsOsIGNodeG7l2kgc2VsZWN0b3Iga2jDtG5nIGFpIGtp4buDbS5cbiAgICpcbiAgICogYHNjb3BlYCBnaeG7m2kgaOG6oW4gcGjhuqFtIHZpIHTDrG0gKG3hurdjIMSR4buLbmggY+G6oyB0w6BpIGxp4buHdSkg4oCUIGPhuqduIGtoaSBuaGnhu4F1IG3hurd0IHBo4bqzbmcgY8O5bmcgbuG6sW0gdHLDqm4gbcOgbi5cbiAgICovXG4gIGdldE5vZGVFbGVtZW50KG5vZGVJZDogc3RyaW5nLCBzY29wZT86IFBhcmVudE5vZGUpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IHNjb3BlID8/IGRvY3VtZW50O1xuXG4gICAgcmV0dXJuIChyb290LnF1ZXJ5U2VsZWN0b3IoYC5saWJzLXVpLWdyaWQtbGF5b3V0LWJsb2NrLXNoZWxsW2RhdGEtbm9kZS1pZD1cIiR7bm9kZUlkfVwiXWApIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRy4bqjIHbhu4EgbeG6t3QgcGjhurNuZyBM4buSTkcgbuG6sW0gdHJvbmcgbeG7mXQga2jhu5FpIGNvbnRhaW5lciAoa2jhu5FpIGPDsyBjb24pLCBu4bq/dSBjw7MuXG4gICAqXG4gICAqIFTDoWNoIHJpw6puZyBraOG7j2kgYGdldE5vZGVFbGVtZW50YCB2w6wgbsahaSBkw7luZyB0aMaw4budbmcgY+G6p24gY2jDqG4gcGjhuqduIHThu60gY+G7p2EgbcOsbmggdsOgbyBUUsav4buaQyBt4bq3dCBwaOG6s25nXG4gICAqIGzhu5NuZyBuw6B5ICh2w60gZOG7pSBow6BuZyB0acOqdSDEkeG7gSBj4bunYSBraOG7kWkgZ2jDqXApLCBuw6puIHBo4bqjaSBj4bqnbSDEkcO6bmcgbsOzIGNo4bupIGtow7RuZyBwaOG6o2kgY+G6oyB24buPLlxuICAgKi9cbiAgZ2V0Tm9kZUNhbnZhc0VsZW1lbnQobm9kZUlkOiBzdHJpbmcsIHNjb3BlPzogUGFyZW50Tm9kZSk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzaGVsbCA9IHRoaXMuZ2V0Tm9kZUVsZW1lbnQobm9kZUlkLCBzY29wZSk7XG5cbiAgICBpZiAoIXNoZWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAoc2hlbGwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gbGlic191aS1zZXJ2aWNlcy1ncmlkX2xheW91dC1jYW52YXMnKSBhcyBIVE1MRWxlbWVudCB8IG51bGwpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbnB1dHMoXG4gICAgcmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gICAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUsXG4gICAgZGVwdGg6IG51bWJlcixcbiAgICBjaGlsZENhbnZhcz86IFRlbXBsYXRlUmVmPHVua25vd24+XG4gICk6IHZvaWQge1xuICAgIHJlZi5zZXRJbnB1dCgnZGF0YScsIG5vZGUuZGF0YSk7XG4gICAgcmVmLnNldElucHV0KCdub2RlJywgbm9kZSk7XG4gICAgcmVmLnNldElucHV0KCdpc0VkaXRNb2RlJywgdGhpcy5lZGl0TW9kZSgpKTtcbiAgICByZWYuc2V0SW5wdXQoJ2RlcHRoJywgZGVwdGgpO1xuICAgIC8vIPCflLQgQ0jhu4ggxJHhurd0IGtoaSBjw7Mga2h1w7RuOiBgc2V0SW5wdXRgIHbhu5tpIG3hu5l0IGlucHV0IGNvbXBvbmVudCBraMO0bmcga2hhaSBsw6AgbOG7l2kgbMO6YyBjaOG6oXksIG3DoFxuICAgIC8vIGNvbXBvbmVudCBu4buZaSBkdW5nIGPhu6dhIGto4buRaSBMw4EgdGjDrCBraMO0bmcgY+G6p24gYmnhur90IMSR4bq/biBt4bq3dCBwaOG6s25nIGzhu5NuZy5cbiAgICBpZiAoY2hpbGRDYW52YXMpIHtcbiAgICAgIHJlZi5zZXRJbnB1dCgnY2hpbGRDYW52YXMnLCBjaGlsZENhbnZhcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqXG4gICAqIPCflLQgS2hhaSBjaG8ga2jhu5FpIEPDkyBDT04gKGNvbnRhaW5lcikgbMOgIGtoYWkgVuG7jiBj4bunYSBraOG7kWkgZ2jDqXAg4oCUIGjDoG5nIHRpw6p1IMSR4buBLCBuw7p0IHRodSBn4buNbiwgbuG7gW4uXG4gICAqIFbhu48gS0jDlE5HIHRoYXkgdGjhur8gbeG6t3QgcGjhurNuZyBs4buTbmcgYsOqbiB0cm9uZzogdGjGsCB2aeG7h24gdHJ1eeG7gW4gbeG6t3QgcGjhurNuZyDEkcOzIHh14buRbmcgY29tcG9uZW50IHbhu48gcXVhXG4gICAqIGlucHV0IGBjaGlsZENhbnZhczogVGVtcGxhdGVSZWY8dW5rbm93bj5gLCB2w6AgduG7jyBC4bquVCBCVeG7mEMgduG6vSBuw7MgcmEgYuG6sW5nIGBuZ1RlbXBsYXRlT3V0bGV0YCwgbuG6v3VcbiAgICoga2jDtG5nIHRvw6BuIGLhu5kga2jhu5FpIGNvbiBiaeG6v24gbeG6pXQga2jhu49pIG3DoG4uXG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPCEtLSB0cm9uZyBjb21wb25lbnQgduG7jyAtLT5cbiAgICogPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAqICAgPGRpdiBjbGFzcz1cInNocmluay0wXCI+e3sgdGl0bGUoKSB9fTwvZGl2PlxuICAgKiAgIDxkaXYgY2xhc3M9XCJtaW4taC0wIGZsZXgtMVwiPlxuICAgKiAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENhbnZhcygpXCIgLz5cbiAgICogICA8L2Rpdj5cbiAgICogPC9kaXY+XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogZOG7ryBsaeG7h3UgcmnDqm5nIGPhu6dhIG7GoWkgZMO5bmcg4oCUIHRoxrAgdmnhu4duIEtIw5RORyDEkeG7jWMsIGNodXnhu4NuIG5ndXnDqm4gdsOgbyBpbnB1dCBgZGF0YWAgY+G7p2EgY29tcG9uZW50ICovXG4gIGRhdGE/OiB1bmtub3duO1xufTtcblxuLyoqXG4gKiDEkGkga8OobSBz4buxIGtp4buHbiBj4bunYSBt4buZdCBOw5pUIGJ1aWx0LWluIHRyw6puIGto4buRaS5cbiAqXG4gKiBUaMawIHZp4buHbiBDSMavQSBsw6BtIGfDrCBraGkgYuG6r24g4oCUIG7DsyBjaOG7iSBiw6FvIFwibmfGsOG7nWkgZMO5bmcgduG7q2EgYuG6pW0gbsO6dCBuw6B5XCIuIE7GoWkgZMO5bmcgcXV54bq/dCDEkeG7i25oOlxuICogLSBj4bqnbiBo4buPaSB0csaw4bubYyAobW9kYWwgeMOhYyBuaOG6rW4sIGfhu41pIEFQSSBraeG7g20gdHJhKSDihpIgaOG7j2kgeG9uZyBy4buTaSBn4buNaSBgY29uZmlybSgpYDtcbiAqIC0ga2jDtG5nIGPhuqduIGjhu49pIOKGkiBn4buNaSBgY29uZmlybSgpYCBuZ2F5O1xuICogLSBraMO0bmcgY2hvIHBow6lwIOKGkiBraMO0bmcgZ+G7jWkgZ8OsIGPhuqMuXG4gKlxuICogYGBgdHNcbiAqIHByb3RlY3RlZCBoYW5kbGVyUmVtb3ZlKGV2ZW50OiBUX2dyaWRMYXlvdXRfYWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAqICAgdGhpcy5kaWFsb2cuY29uZmlybSgnWG/DoSBraOG7kWkgbsOgeT8nKS5zdWJzY3JpYmUoKGRvbmdZKSA9PiBkb25nWSAmJiBldmVudC5jb25maXJtKCkpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCA9IHtcbiAgLyoqIGto4buRaSBuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0ICovXG4gIG5vZGVJZDogc3RyaW5nO1xuICAvKioga2jhu5FpIMSRw7MsIGtoaSBi4bqhbiBj4bqnbiDEkeG7jWMgYGRhdGFgIMSR4buDIHF1eeG6v3QgxJHhu4tuaCAodmQga2jhu5FpIMSRYW5nIGPDsyBk4buvIGxp4buHdSB0aMOsIG3hu5tpIGjhu49pKSAqL1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqXG4gICAqIEfhu41pIMSR4buDIHRoxrAgdmnhu4duIHRo4buxYyBoaeG7h24gdGhhbyB0w6FjLiBLaMO0bmcgZ+G7jWkgPSBraMO0bmcgbMOgbSBnw6wuXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIHRoYW8gdMOhYyBraMO0bmcgdGjhu7FjIGhp4buHbiDEkcaw4bujYyAoa2jhu5FpIMSRw6MgYuG7iyB4b8OhLCBjaOG6oW0gdHLhuqduIGzhu5NuZyBj4bqlcOKApikuXG4gICAqL1xuICBjb25maXJtOiAoKSA9PiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBLaOG7kWkgTeG7mkkgdHJ1eeG7gW4gdsOgbyBgYWRkQ2hpbGRgLiBLaMOhYyBgVF9ncmlkTGF5b3V0X25vZGVgIOG7nyBiYSBjaOG7lyBkbyB0aMawIHZp4buHbiB04buxIGxvOlxuICogLSBgaWRgIHThu7Egc2luaCAobcOjIG3DoXkgZMO5bmcgxJHhu4MgdHJhIGPhu6l1LCBraMO0bmcgcGjhuqNpIHRo4bupIG5nxrDhu51pIGTDuW5nIG5naMSpIHJhKSxcbiAqIC0gYHhgIMK3IGB5YCB04buxIMSR4bq3dCB4deG7kW5nIGjDoG5nIHRy4buRbmcga+G6vyB0aeG6v3AuXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9uZXdOb2RlID0gT21pdDxUX2dyaWRMYXlvdXRfbm9kZSwgJ2lkJyB8ICd4JyB8ICd5Jz4gJiB7XG4gIC8qKiDEkeG7gyB0cuG7kW5nIHRow6wgdGjGsCB2aeG7h24gc2luaDsgY2jhu4kgdHJ1eeG7gW4ga2hpIGLhuqFuIEPhuqZOIG3hu5l0IGlkIGPhu5EgxJHhu4tuaCAodmQga2jDtGkgcGjhu6VjIHThu6sgYuG6o24gbMawdSkgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBC4bqtdCDEkeG7gyBHSeG7riBgeGAvYHlgIHRydXnhu4FuIHbDoG8uIE3hurdjIMSR4buLbmggdOG6r3Q6IHRoxrAgdmnhu4duIHThu7EgeOG6v3Aga2jhu5FpIHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAgICpcbiAgICog8J+UtCBQaOG6o2kgbMOgIGPhu50gdMaw4budbmcgbWluaCwgS0jDlE5HIHN1eSByYSB04burIHZp4buHYyBjw7MgdHJ1eeG7gW4gYHhgL2B5YCBoYXkga2jDtG5nOiBgMGAgduG7q2EgbMOgIHRv4bqhIMSR4buZXG4gICAqIGjhu6NwIGzhu4cgduG7q2EgbMOgIGdpw6EgdHLhu4sgbeG7jWkgaMOgbSBk4buxbmcgbm9kZSDEkWnhu4FuIHPhurVuLCBuw6puIMSRb8OhbiBuaOG6p20gbMOgIGto4buRaSBt4bubaSDEkcOoIGzDqm4ga2jhu5FpIGPFqS5cbiAgICpcbiAgICogQ+G7nSBuw6B5IGNo4buJIMSR4buDIMSRaeG7gXUga2hp4buDbiBsw7pjIHRow6ptLCBraMO0bmcgxJHGsOG7o2MgbMawdSBs4bqhaSB0cm9uZyBjw6J5LlxuICAgKi9cbiAga2VlcFBvc2l0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogxJBpIGvDqG0gc+G7sSBraeG7h24gYuG6pW0gbsO6dCBUSMOKTSB0csOqbiBt4buZdCBjb250YWluZXIuXG4gKlxuICogS2jDoWMgYFRfZ3JpZExheW91dF9hY3Rpb25FdmVudGAg4bufIGNo4buXIGBjb25maXJtYCBuaOG6rW4ga2jhu5FpIG114buRbiB0aMOqbTogdGjGsCB2aeG7h24ga2jDtG5nIGJp4bq/dCBz4bqjbiBwaOG6qW1cbiAqIGPhu6dhIGLhuqFuIGPDsyBuaOG7r25nIGxv4bqhaSBraOG7kWkgbsOgbywgbsOqbiBi4bqhbiBt4bufIG1lbnUgY2jhu41uIGxv4bqhaSBy4buTaSB0cnV54buBbiBraOG7kWkgxJHDoyBk4buxbmcgdsOgbyDEkcOieS5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FkZEV2ZW50ID0ge1xuICAvKiogY29udGFpbmVyIG5nxrDhu51pIGTDuW5nIG114buRbiB0aMOqbSBraOG7kWkgdsOgbyAqL1xuICBub2RlSWQ6IHN0cmluZztcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB0aMawIHZp4buHbiBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIG7hur91IGtow7RuZyB0aMOqbSDEkcaw4bujYyAqL1xuICBjb25maXJtOiAoaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUpID0+IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiDEkOG6p3UgdsOgbyBtw6AgdGjGsCB2aeG7h24gdHJ1eeG7gW4gY2hvIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nLlxuICogQ29tcG9uZW50IELhuq5UIEJV4buYQyBraGFpIMSR4bunIGJhIGlucHV0IG7DoHkgKGTDuW5nIGBpbnB1dCgpYCksIHRoaeG6v3UgY8OhaSBuw6BvIHRow6wgYHNldElucHV0YCBuw6ltIGzhu5dpLlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfbm9kZUlucHV0czxURGF0YSA9IHVua25vd24+ID0ge1xuICAvKiogxJHDum5nIGBub2RlLmRhdGFgIGPhu6dhIGto4buRaSDigJQgdGjhu6kgbsahaSBkw7luZyBj4bqnbiBuaOG6pXQsIG7Dqm4gxJHhu4MgxJHhuqd1ICovXG4gIGRhdGE6IFREYXRhO1xuICAvKiogY+G6oyBraOG7kWksIGtoaSBj4bqnbiBiaeG6v3QgaWQgwrcga8OtY2ggdGjGsOG7m2MgwrcgY8OzIHBo4bqjaSBjb250YWluZXIga2jDtG5nICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKiogxJFhbmcg4bufIGNo4bq/IMSR4buZIHPhu61hIGhheSBjaOG7iSB4ZW0gKi9cbiAgaXNFZGl0TW9kZTogYm9vbGVhbjtcbiAgLyoqIMSR4buZIHPDonU6IDAgPSBn4buRYywgMSA9IGto4buRaSBj4bqlcCB0cmFuZywgMiA9IGto4buRaSB0cm9uZyBjb250YWluZXIgKi9cbiAgZGVwdGg6IG51bWJlcjtcbn07XG5cbi8qKiBD4bqldSBow6xuaCBraOG7n2kgdOG6oW8gbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY29uZmlnID0ge1xuICAvKipcbiAgICogSMOgbSBQSMOCTiBHSeG6okkgY29tcG9uZW50IGNobyBt4buZdCBraOG7kWkg4oCUIGNo4buXIGLhuqFuIG1hcCB04burIGThu68gbGnhu4d1IHNlcnZlciBzYW5nIGdpYW8gZGnhu4duLlxuICAgKlxuICAgKiBN4bq3dCBwaOG6s25nIGfhu41pIGjDoG0gbsOgeSBjaG8gTeG7lkkga2jhu5FpIGtow7RuZyB04buxIGtoYWkgYGdldENvbXBvbmVudE91dGxldGAuIFRy4bqjIGBPYnNlcnZhYmxlYCBuw6puXG4gICAqIGBpbXBvcnQoKWAgxJHhu5luZyBjaOG6oXkgxJHGsOG7o2M6IGLDsyBtw6MgY+G7p2EgdOG7q25nIGxv4bqhaSBraOG7kWkgY2jhu4kgdOG6o2kga2hpIG3DoG4gdGjhuq10IHPhu7EgY8OzIGto4buRaSBsb+G6oWkgxJHDsy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZ2V0Q29tcG9uZW50T3V0bGV0OiAobm9kZSkgPT4ge1xuICAgKiAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kYXRhIGFzIHsgdHlwZTogc3RyaW5nIH07XG4gICAqXG4gICAqICAgaWYgKHR5cGUgPT09ICdjaGFydCcpIHtcbiAgICogICAgIHJldHVybiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSk7XG4gICAqICAgfVxuICAgKlxuICAgKiAgIHJldHVybiBmcm9tKGltcG9ydCgnLi90ZXh0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5UZXh0Q2FyZENvbXBvbmVudCkpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogY8OieSBraOG7kWkgYmFuIMSR4bqndSAqL1xuICBkYXRhOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgbW9kZT86IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZztcbiAgaXNFZGl0TW9kZT86IGJvb2xlYW47XG4gIC8qKiBz4buRIGPhu5l0IGPhu6dhIGzGsOG7m2kgKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDEyICovXG4gIGNvbHM/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZywgcHggKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDU2ICovXG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIEPhuqRQIFRSQU5HLiBN4bq3YyDEkeG7i25oIDIuXG4gICAqXG4gICAqIMSQ4bq3dCBs4bubbiBoxqFuIGtoaSBtdeG7kW4gw7QgbGkgcGjhu6cga8OtbiBtw6BuIGjDrG5oIG5nYXkgY+G6oyBsw7pjIGLhu5EgY+G7pWMgY8OybiDDrXQga2jhu5FpIOKAlCBsxrDhu5tpIGNo4buJIGNhbyBi4bqxbmdcbiAgICoga2jhu5FpIGN14buRaSBjw7luZyB0aMOsIHBo4bqnbiBkxrDhu5tpIHRy4buRbmcgdHLGoW4sIG5nxrDhu51pIGTDuW5nIGtow7RuZyBiaeG6v3QgY8OybiB0aOG6oyDEkcaw4bujYyB2w6BvIMSRw6J1LlxuICAgKi9cbiAgbWluUm93cz86IG51bWJlcjtcbiAgLyoqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIGLDqm4gVFJPTkcgY29udGFpbmVyLiBN4bq3YyDEkeG7i25oIDEgKi9cbiAgbmVzdGVkTWluUm93cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIENobyBsxrDhu5tpIEzhu5JORyB04buxIMSRbyBs4bqhaSBraGkga2h1bmcgY2jhu6lhIG7DsyDEkeG7lWkgYuG7gSBy4buZbmcuIE3hurdjIMSR4buLbmggQuG6rFQuXG4gICAqXG4gICAqIFThuq90IMSRaSB0aMOsIGzDumMga8OpbyBtw6lwIGto4buRaSBjaGEsIHRo4bq7IGNvbiDEkeG7qW5nIGltIHThu5tpIGtoaSB0aOG6oyB0YXkg4oCUIGNo4buJIHThuq90IG7hur91IG7GoWkgZMO5bmcgdOG7sSBsb1xuICAgKiB2aeG7h2MgxJFvIGzhuqFpLlxuICAgKi9cbiAgYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzPzogYm9vbGVhbjtcbiAgLyoqIGtoZSBnaeG7r2EgaGFpIGto4buRaSDhu58gbMaw4bubaSBD4bqkUCBUUkFORywgcHguIE3hurdjIMSR4buLbmggMTIgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKipcbiAgICogS2hlIE5Iw4xOIFRI4bqkWSBnaeG7r2EgaGFpIGto4buRaSBj4bqlcCB0cmFuZywgcHgg4oCUIHBo4bqnbiB24buPIGto4buRaSB0aOG7pXQgdsOgbyBu4butYSBraGUgbeG7l2kgY+G6oW5oLlxuICAgKlxuICAgKiDwn5S0IEtow6FjIGBtYXJnaW5gOiBgbWFyZ2luYCBsw6Aga2hlIGPhu6dhIMOUIEzGr+G7mkkgbsOqbiDEkeG7lWkgbsOzIGzDoCDEkeG7lWkgbHXDtG4gYsaw4bubYyBrw6lvIHbDoCBwaMOpcCB0w61uaCB2YVxuICAgKiBjaOG6oW0uIE114buRbiB0aOG6uyB0csO0bmcgdGjGsGEgcmEgbcOgIGLGsOG7m2Mga8OpbyBnaeG7ryBuZ3V5w6puIHRow6wgZMO5bmcgYHZpc3VhbEdhcGAg4oCUIMO0IGzGsOG7m2kga2jDtG5nIMSR4buVaSxcbiAgICogY2jhu4kgcGjhuqduIG5ow6xuIHRo4bqleSBjbyBs4bqhaS4gS2jDtG5nIGtoYWkgdGjDrCBraMO0bmcgw6FwIGfDrCAoZ2nhu68gxJHDum5nIGjDoG5oIHZpIGPFqSkuXG4gICAqXG4gICAqIENo4buJIMOhcCBjaG8ga2jhu5FpIEPhuqRQIEfhu5BDOyBraOG7kWkgY29uIHRyb25nIGNvbnRhaW5lciBnaeG7ryBuZ3V5w6puIMSR4buDIGtow7RuZyB0w6FjaCBy4budaSBjw6FjIGTDsm5nIGPhu6dhXG4gICAqIGPDuW5nIG3hu5l0IHRo4bq7LlxuICAgKi9cbiAgdmlzdWFsR2FwPzogbnVtYmVyO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAyIOKAlCBraOG7kWkgY29uIGzDoCBkw7JuZyB0aMO0bmcgdGluIGPhu6dhIGPDuW5nXG4gICAqICBt4buZdCBjYXJkLCBraGUgcuG7mW5nIGzDoG0gY2jDum5nIHRyw7RuZyBuaMawIGNhcmQgcuG7nWkgbmhhdSAqL1xuICBuZXN0ZWRNYXJnaW4/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZyBiw6puIFRST05HIGNvbnRhaW5lciwgcHguIE3hurdjIMSR4buLbmggMTYg4oCUIGjDoG5nIG5o4buPIGNobyBixrDhu5tjIGvDqW8gbeG7i24gKi9cbiAgbmVzdGVkUm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogTOG7gSB0cm9uZyBj4bunYSBDT05UQUlORVIsIHB4IOKAlCDDoXAgxJHhu4F1IGLhu5FuIGNoaeG7gXUuIE3hurdjIMSR4buLbmggMTIuXG4gICAqXG4gICAqIENo4buJIGNvbnRhaW5lciBjw7MgbOG7gSBuw6B5OyBraOG7kWkgxJHGoW4ga2jDtG5nIGPDsywgdsOsIG7DsyBraMO0bmcgY2jhu6lhIGfDrCBiw6puIHRyb25nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBuw6puIMSR4buDIDA6IHRheSBj4bqnbSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2Ega2jhu5FpIGNvbiBu4bqxbSBzw6F0IGJpw6puIGNvbnRhaW5lciwga2jDtG5nIGNo4burYSBs4buBXG4gICAqIHRow6wgY2h14buZdCBraMO0bmcgdHLDum5nIMSRxrDhu6NjIG7DsyB2w6Aga2jhu5FpIGNvbiBt4bqldCBsdcO0biBraOG6oyBuxINuZyByZXNpemUuXG4gICAqL1xuICBjb250YWluZXJQYWRkaW5nPzogbnVtYmVyO1xuICAvKiogdmnhu4FuIG5nb8OgaSBxdWFuaCBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIGLhuq10ICovXG4gIG91dGVyTWFyZ2luPzogYm9vbGVhbjtcbiAgLyoqIGNo4burYSB0aMOqbSBiYW8gbmhpw6p1IHB4IGTGsOG7m2kgxJHDoXkgbMaw4bubaSBj4bqlcCB0cmFuZy4gTeG6t2MgxJHhu4tuaCA0MCAqL1xuICBvdXRlck1hcmdpbkJvdHRvbT86IG51bWJlcjtcbiAgLyoqIHPhu5EgaMOgbmcgdOG7kWkgdGhp4buDdSBt4buZdCBraOG7kWkgxJHGsOG7o2MgY28gbOG6oWkuIE3hurdjIMSR4buLbmggMiAqL1xuICBtaW5JdGVtUm93cz86IG51bWJlcjtcbiAgLyoqIGvDrWNoIHRoxrDhu5tjIG3hurdjIMSR4buLbmggY+G7p2Ega2jhu5FpIG3hu5tpLCB0w61uaCB0aGVvIMO0IGzGsOG7m2kuIE3hurdjIMSR4buLbmggMyBj4buZdCDDlyAyIGjDoG5nICovXG4gIGRlZmF1bHRJdGVtQ29scz86IG51bWJlcjtcbiAgZGVmYXVsdEl0ZW1Sb3dzPzogbnVtYmVyO1xuICAvKipcbiAgICogQ2hvIHBow6lwIGhhaSBraOG7kWkgS0jDgUMgYGxheWVySW5kZXhgIG7hurFtIGNo4buTbmcgbmhhdS5cbiAgICogQ2jhur8gxJHhu5kgYHR1RG9gIGx1w7RuIGLhuq10LCBraMO0bmcgxJHhu41jIGPhu50gbsOgeS5cbiAgICovXG4gIGFsbG93T3ZlcmxhcD86IGJvb2xlYW47XG4gIC8qKiB0cuG6p24gc+G7kSBj4bqlcCBjb250YWluZXIgbOG7k25nIG5oYXUuIE3hurdjIMSR4buLbmggMSAoY29udGFpbmVyIGtow7RuZyBjaOG7qWEgY29udGFpbmVyKSAqL1xuICBtYXhDb250YWluZXJEZXB0aD86IG51bWJlcjtcbiAgLyoqIELhuq10IHTDrW5oIG7Eg25nIHRodSBwaMOzbmcgKHpvb20pIGNhbnZhcy4gTeG6t2MgxJHhu4tuaCBmYWxzZSAqL1xuICBlbmFibGVab29tPzogYm9vbGVhbjtcbiAgLyoqIFThu7cgbOG7hyB0aHUgcGjDs25nIGJhbiDEkeG6p3UuIE3hurdjIMSR4buLbmggMSAoMTAwJSkgKi9cbiAgaW5pdGlhbFpvb20/OiBudW1iZXI7XG4gIC8qKiBHaeG7m2kgaOG6oW4gdGh1IHBow7NuZyB04buRaSB0aGnhu4N1LiBN4bq3YyDEkeG7i25oIDAuNCAoNDAlKSAqL1xuICB6b29tTWluPzogbnVtYmVyO1xuICAvKiogR2nhu5tpIGjhuqFuIHRodSBwaMOzbmcgdOG7kWkgxJFhLiBN4bq3YyDEkeG7i25oIDEuNSAoMTUwJSkgKi9cbiAgem9vbU1heD86IG51bWJlcjtcbiAgLyoqIELGsOG7m2MgbmjhuqN5IG3hu5dpIGzhuqduIHTEg25nL2dp4bqjbSB0aHUgcGjDs25nLiBN4bq3YyDEkeG7i25oIDAuMDUgKDUlKSAqL1xuICB6b29tU3RlcD86IG51bWJlcjtcbiAgLyoqIENoaeG7gXUgcuG7mW5nIGNodeG6qW4gY+G7p2EgY2FudmFzIHN0YWdlLCBweC4gTeG6t2MgxJHhu4tuaCAxNjY4ICovXG4gIHN0YWdlV2lkdGg/OiBudW1iZXI7XG4gIC8qKiBDaGnhu4F1IGNhbyB04buRaSB0aGnhu4N1IGPhu6dhIGNhbnZhcyBzdGFnZSwgcHguIE3hurdjIMSR4buLbmggOTM3ICovXG4gIHN0YWdlTWluSGVpZ2h0PzogbnVtYmVyO1xuICAvKiogS2jDs2EgbMawdSB04bu3IGzhu4cgdGh1IHBow7NuZyB2w6BvIGxvY2FsU3RvcmFnZSAodmQgJ29jYl9iaV9jYW52YXNfem9vbScpICovXG4gIHN0b3JhZ2VLZXk/OiBzdHJpbmc7XG4gIC8qKiBU4buxIMSR4buZbmcgduG7q2EgbcOgbiBow6xuaCBraGkgdOG6o2kgdHJhbmcgbOG6p24gxJHhuqd1IG7hur91IGtodW5nIG5ow6xuIG5o4buPIGjGoW4gc3RhZ2UuIE3hurdjIMSR4buLbmggdHJ1ZSAqL1xuICBhdXRvRml0T25Mb2FkPzogYm9vbGVhbjtcbn07XG5cbi8qKiBM4buxYSBjaOG7jW4gdOG7tyBs4buHIHRodSBwaMOzbmcgdHLDqm4gbWVudSBkcm9wZG93biAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X3pvb21QcmVzZXQgPSB7XG4gIC8qKiBLaG/DoSBpMThuLCBLSMOUTkcgcGjhuqNpIGNo4buvIGhp4buDbiB0aOG7iyDigJQgdGVtcGxhdGUgZOG7i2NoIHF1YSBgdHJhbnNsYXRlYCBwaXBlLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHRoxrAgdmnhu4duIGLhuq9uIHJhIGtoaSBi4buRIGPhu6VjIMSR4buVaSAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2NoYW5nZUV2ZW50ID0ge1xuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqIGto4buRaSB24burYSBi4buLIHTDoWMgxJHhu5luZzsgYuG7jyB0cuG7kW5nIGtoaSDEkeG7lWkgZGnhu4duIHLhu5luZyAoc+G6r3AgZ+G7jW4sIG7huqFwIGzhuqFpKSAqL1xuICBub2RlSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIELhu5FpIGPhuqNuaCB0cnV54buBbiB2w6BvIGB0ZW1wbGF0ZVRvb2xiYXJgIOKAlCB0ZW1wbGF0ZSB04buxIHbhur0gdGhhbmggY8O0bmcgY+G7pSB0aGF5IGLhu5kgbsO6dCBt4bq3YyDEkeG7i25oLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuZy10ZW1wbGF0ZSAjdG9vbGJhciBsZXQtbm9kZSBsZXQtY3R4PVwiY3R4XCI+XG4gKiAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAqICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICogICAgIChvdXRDbGljayk9XCJjdHgucmVtb3ZlKClcIiAvPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfdG9vbGJhckNvbnRleHQgPSB7XG4gIC8qKiBraOG7kWkgxJFhbmcgduG6vSDigJQgZMO5bmcgYGxldC1ub2RlYCB0cm9uZyB0ZW1wbGF0ZSAqL1xuICAkaW1wbGljaXQ6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKioga2jhu5FpIG7DoHkgbMOgIGNvbnRhaW5lciAoY8OzIHJ14buZdCkgaGF5IGto4buRaSDEkcahbiAqL1xuICBpc0NvbnRhaW5lcjogYm9vbGVhbjtcbiAgLyoqIGPDsm4gdGjDqm0gxJHGsOG7o2Mga2jhu5FpIHbDoG8gdHJvbmcga2jDtG5nIChjaMawYSBjaOG6oW0gdHLhuqduIGzhu5NuZyBj4bqlcCkgKi9cbiAgY2FuQWRkSW5zaWRlOiBib29sZWFuO1xuICAvKiogxJHhu5VpIMSRxrDhu6NjIGdp4buvYSBraOG7kWkgxJHGoW4g4oaUIGto4buRaSBnaMOpcCBraMO0bmcgKi9cbiAgY2FuVG9nZ2xlVHlwZTogYm9vbGVhbjtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRSZW1vdmVOb2RlYCBuaMawIGtoaSBi4bqlbSBuw7p0IHhvw6EgbeG6t2MgxJHhu4tuaCAqL1xuICByZW1vdmU6ICgpID0+IHZvaWQ7XG4gIC8qKiBn4buNaSDEkeG7gyB0aMawIHZp4buHbiBwaMOhdCBgb3V0QWRkQmxvY2tJbnNpZGVgICovXG4gIGFkZEluc2lkZTogKCkgPT4gdm9pZDtcbiAgLyoqIGfhu41pIMSR4buDIHRoxrAgdmnhu4duIHBow6F0IGBvdXRUb2dnbGVUeXBlYCAqL1xuICB0b2dnbGVUeXBlOiAoKSA9PiB2b2lkO1xufTtcblxuLyoqIEtodW5nIHhlbSB0csaw4bubYyAoZ2hvc3QgcHJldmlldykga2hpIGvDqW8gdGjhursgdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCA9IHtcbiAgY29sOiBudW1iZXI7XG4gIHJvdzogbnVtYmVyO1xuICBjb2xzOiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgcGl4ZWxMZWZ0OiBudW1iZXI7XG4gIHBpeGVsVG9wOiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgcGl4ZWxIZWlnaHQ6IG51bWJlcjtcbiAgaXNJbnNpZGVHcm91cDogYm9vbGVhbjtcbiAgdGFyZ2V0UGFyZW50SWQ/OiBzdHJpbmc7XG4gIGdyb3VwVGl0bGU/OiBzdHJpbmc7XG4gIGNhcmRUaXRsZTogc3RyaW5nO1xuICBjYXJkSWNvblRleHQ/OiBzdHJpbmc7XG4gIGNhcmRJY29uQ2xhc3M/OiBzdHJpbmc7XG4gIGhvdmVyZWRHcmlkc3Rlcj86IEhUTUxFbGVtZW50O1xufTtcblxuLyoqIFPhu7Ega2nhu4duIHBow6F0IHJhIGtoaSB0aOG6oyBt4buZdCB0aOG6uyBt4bubaSB04burIGLDqm4gbmdvw6BpIHbDoG8gY2FudmFzICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfZHJvcEV2ZW50ID0ge1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG4gIHJhd0V2ZW50OiBEcmFnRXZlbnQ7XG4gIHBheWxvYWQ/OiB1bmtub3duO1xufTtcblxuLyoqIEThu68gbGnhu4d1IGPhu6dhIHRo4bq7IGvDqW8gdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQgPSB7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb2xzPzogbnVtYmVyO1xuICByb3dzPzogbnVtYmVyO1xuICBpY29uVGV4dD86IHN0cmluZztcbiAgaWNvbkNsYXNzPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqIENo4bq/IMSR4buZIHPhuq9wIHjhur9wIGto4buRaSB0csOqbiBt4bq3dCBwaOG6s25nICovXG5leHBvcnQgY29uc3QgZW51bSBFX2dyaWRMYXlvdXRfbW9kZV9zdHJpbmcge1xuICAvKiogQsOhbSBsxrDhu5tpOiBraOG7kWkgdGjhurNuZyBow6BuZywgdOG7sSDEkeG6qXkgbmhhdSwgc+G6r3AgZ+G7jW4gxJHGsOG7o2MgKi9cbiAgZ3JpZCA9ICdncmlkJyxcbiAgLyoqIFThu7EgZG86IGto4buRaSDEkeG6t3Qg4bufIHRv4bqhIMSR4buZIGLhuqV0IGvhu7MsIGNo4buTbmcgbMOqbiBuaGF1IHRob+G6o2kgbcOhaSAqL1xuICBmcmVlID0gJ2ZyZWUnLFxufVxuXG4vKiogTeG7mXQga2jhu5FpIHRyw6puIG3hurd0IHBo4bqzbmcuIGBjaGlsZHJlbmAga2jDoWMgcuG7l25nIHRow6wga2jhu5FpIGzDoCBDT05UQUlORVIsIHJ14buZdCBuw7MgbMOgIG3hu5l0IGzGsOG7m2kgY29uLiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBj4buZdCBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBYIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB4OiBudW1iZXI7XG4gIC8qKiBow6BuZyBi4bqvdCDEkeG6p3UgKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCB0aGVvIHRy4bulYyBZIChjaOG6vyDEkeG7mSB04buxIGRvKSAqL1xuICB5OiBudW1iZXI7XG4gIC8qKiBz4buRIGPhu5l0IGNoaeG6v20gKGNo4bq/IMSR4buZIGzGsOG7m2kpIOKAlCBweCBjaGnhu4F1IHLhu5luZyAoY2jhur8gxJHhu5kgdOG7sSBkbykgKi9cbiAgY29sczogbnVtYmVyO1xuICAvKiogc+G7kSBow6BuZyBjaGnhur9tIChjaOG6vyDEkeG7mSBsxrDhu5tpKSDigJQgcHggY2hp4buBdSBjYW8gKGNo4bq/IMSR4buZIHThu7EgZG8pICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu5twIGNo4buTbmcuIEhhaSBraOG7kWkgQ0jhu5JORyBuaGF1IMSRxrDhu6NjIGtoaSBraMOhYyBgbGF5ZXJJbmRleGAgdsOgIGBhbGxvd092ZXJsYXBgIGLhuq10LlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4buNaSBraOG7kWkgY8O5bmcgbOG7m3AgMCDigJQgY2jhu5NuZyBuaGF1IGLhu4sgY2jhurduIG5oxrAgbMaw4bubaSB0aMaw4budbmcuXG4gICAqL1xuICBsYXllckluZGV4PzogbnVtYmVyO1xuICAvKioga2jhu5FpIGNvbjsga2jDoWMgcuG7l25nIHRow6wgxJHDonkgbMOgIGNvbnRhaW5lciAqL1xuICBjaGlsZHJlbj86IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPjtcbiAgLyoqXG4gICAqIENvbXBvbmVudCB24bq9IFJJw4pORyBjaG8ga2jhu5FpIG7DoHksIHRy4bqjIHbhu4EgZOG6oW5nIE9ic2VydmFibGUgxJHhu4MgTEFaWSBMT0FEIHRo4bqtdCBz4buxLlxuICAgKiBC4buPIHRy4buRbmcgdGjDrCBt4bq3dCBwaOG6s25nIGjhu49pIGBnZXRDb21wb25lbnRPdXRsZXRgIGNodW5nIGPhu6dhIGPhuqV1IGjDrG5oLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBnZXRDb21wb25lbnRPdXRsZXQ6IChub2RlKSA9PiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSlcbiAgICogYGBgXG4gICAqXG4gICAqIPCflLQgS2hhaSBjaG8ga2jhu5FpIEPDkyBDT04gKGNvbnRhaW5lcikgbMOgIGtoYWkgVuG7jiBj4bunYSBraOG7kWkgZ2jDqXAg4oCUIGjDoG5nIHRpw6p1IMSR4buBLCBuw7p0IHRodSBn4buNbiwgbuG7gW4uXG4gICAqIFbhu48gS0jDlE5HIHRoYXkgdGjhur8gbeG6t3QgcGjhurNuZyBs4buTbmcgYsOqbiB0cm9uZzogdGjGsCB2aeG7h24gdHJ1eeG7gW4gbeG6t3QgcGjhurNuZyDEkcOzIHh14buRbmcgY29tcG9uZW50IHbhu48gcXVhXG4gICAqIGlucHV0IGBjaGlsZENhbnZhczogVGVtcGxhdGVSZWY8dW5rbm93bj5gLCB2w6AgduG7jyBC4bquVCBCVeG7mEMgduG6vSBuw7MgcmEgYuG6sW5nIGBuZ1RlbXBsYXRlT3V0bGV0YCwgbuG6v3VcbiAgICoga2jDtG5nIHRvw6BuIGLhu5kga2jhu5FpIGNvbiBiaeG6v24gbeG6pXQga2jhu49pIG3DoG4uXG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPCEtLSB0cm9uZyBjb21wb25lbnQgduG7jyAtLT5cbiAgICogPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAqICAgPGRpdiBjbGFzcz1cInNocmluay0wXCI+e3sgdGl0bGUoKSB9fTwvZGl2PlxuICAgKiAgIDxkaXYgY2xhc3M9XCJtaW4taC0wIGZsZXgtMVwiPlxuICAgKiAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENhbnZhcygpXCIgLz5cbiAgICogICA8L2Rpdj5cbiAgICogPC9kaXY+XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogZOG7ryBsaeG7h3UgcmnDqm5nIGPhu6dhIG7GoWkgZMO5bmcg4oCUIHRoxrAgdmnhu4duIEtIw5RORyDEkeG7jWMsIGNodXnhu4NuIG5ndXnDqm4gdsOgbyBpbnB1dCBgZGF0YWAgY+G7p2EgY29tcG9uZW50ICovXG4gIGRhdGE/OiB1bmtub3duO1xufTtcblxuLyoqXG4gKiDEkGkga8OobSBz4buxIGtp4buHbiBj4bunYSBt4buZdCBOw5pUIGJ1aWx0LWluIHRyw6puIGto4buRaS5cbiAqXG4gKiBUaMawIHZp4buHbiBDSMavQSBsw6BtIGfDrCBraGkgYuG6r24g4oCUIG7DsyBjaOG7iSBiw6FvIFwibmfGsOG7nWkgZMO5bmcgduG7q2EgYuG6pW0gbsO6dCBuw6B5XCIuIE7GoWkgZMO5bmcgcXV54bq/dCDEkeG7i25oOlxuICogLSBj4bqnbiBo4buPaSB0csaw4bubYyAobW9kYWwgeMOhYyBuaOG6rW4sIGfhu41pIEFQSSBraeG7g20gdHJhKSDihpIgaOG7j2kgeG9uZyBy4buTaSBn4buNaSBgY29uZmlybSgpYDtcbiAqIC0ga2jDtG5nIGPhuqduIGjhu49pIOKGkiBn4buNaSBgY29uZmlybSgpYCBuZ2F5O1xuICogLSBraMO0bmcgY2hvIHBow6lwIOKGkiBraMO0bmcgZ+G7jWkgZ8OsIGPhuqMuXG4gKlxuICogYGBgdHNcbiAqIHByb3RlY3RlZCBoYW5kbGVyUmVtb3ZlKGV2ZW50OiBUX2dyaWRMYXlvdXRfYWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAqICAgdGhpcy5kaWFsb2cuY29uZmlybSgnWG/DoSBraOG7kWkgbsOgeT8nKS5zdWJzY3JpYmUoKGRvbmdZKSA9PiBkb25nWSAmJiBldmVudC5jb25maXJtKCkpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9hY3Rpb25FdmVudCA9IHtcbiAgLyoqIGto4buRaSBuZ8aw4budaSBkw7luZyB24burYSBi4bqlbSBuw7p0ICovXG4gIG5vZGVJZDogc3RyaW5nO1xuICAvKioga2jhu5FpIMSRw7MsIGtoaSBi4bqhbiBj4bqnbiDEkeG7jWMgYGRhdGFgIMSR4buDIHF1eeG6v3QgxJHhu4tuaCAodmQga2jhu5FpIMSRYW5nIGPDsyBk4buvIGxp4buHdSB0aMOsIG3hu5tpIGjhu49pKSAqL1xuICBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqXG4gICAqIEfhu41pIMSR4buDIHRoxrAgdmnhu4duIHRo4buxYyBoaeG7h24gdGhhbyB0w6FjLiBLaMO0bmcgZ+G7jWkgPSBraMO0bmcgbMOgbSBnw6wuXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIHRoYW8gdMOhYyBraMO0bmcgdGjhu7FjIGhp4buHbiDEkcaw4bujYyAoa2jhu5FpIMSRw6MgYuG7iyB4b8OhLCBjaOG6oW0gdHLhuqduIGzhu5NuZyBj4bqlcOKApikuXG4gICAqL1xuICBjb25maXJtOiAoKSA9PiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBLaOG7kWkgTeG7mkkgdHJ1eeG7gW4gdsOgbyBgYWRkQ2hpbGRgLiBLaMOhYyBgVF9ncmlkTGF5b3V0X25vZGVgIOG7nyBiYSBjaOG7lyBkbyB0aMawIHZp4buHbiB04buxIGxvOlxuICogLSBgaWRgIHThu7Egc2luaCAobcOjIG3DoXkgZMO5bmcgxJHhu4MgdHJhIGPhu6l1LCBraMO0bmcgcGjhuqNpIHRo4bupIG5nxrDhu51pIGTDuW5nIG5naMSpIHJhKSxcbiAqIC0gYHhgIMK3IGB5YCB04buxIMSR4bq3dCB4deG7kW5nIGjDoG5nIHRy4buRbmcga+G6vyB0aeG6v3AuXG4gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9uZXdOb2RlID0gT21pdDxUX2dyaWRMYXlvdXRfbm9kZSwgJ2lkJyB8ICd4JyB8ICd5Jz4gJiB7XG4gIC8qKiDEkeG7gyB0cuG7kW5nIHRow6wgdGjGsCB2aeG7h24gc2luaDsgY2jhu4kgdHJ1eeG7gW4ga2hpIGLhuqFuIEPhuqZOIG3hu5l0IGlkIGPhu5EgxJHhu4tuaCAodmQga2jDtGkgcGjhu6VjIHThu6sgYuG6o24gbMawdSkgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBC4bqtdCDEkeG7gyBHSeG7riBgeGAvYHlgIHRydXnhu4FuIHbDoG8uIE3hurdjIMSR4buLbmggdOG6r3Q6IHRoxrAgdmnhu4duIHThu7EgeOG6v3Aga2jhu5FpIHh14buRbmcgaMOgbmcgdHLhu5FuZyBr4bq/IHRp4bq/cC5cbiAgICpcbiAgICog8J+UtCBQaOG6o2kgbMOgIGPhu50gdMaw4budbmcgbWluaCwgS0jDlE5HIHN1eSByYSB04burIHZp4buHYyBjw7MgdHJ1eeG7gW4gYHhgL2B5YCBoYXkga2jDtG5nOiBgMGAgduG7q2EgbMOgIHRv4bqhIMSR4buZXG4gICAqIGjhu6NwIGzhu4cgduG7q2EgbMOgIGdpw6EgdHLhu4sgbeG7jWkgaMOgbSBk4buxbmcgbm9kZSDEkWnhu4FuIHPhurVuLCBuw6puIMSRb8OhbiBuaOG6p20gbMOgIGto4buRaSBt4bubaSDEkcOoIGzDqm4ga2jhu5FpIGPFqS5cbiAgICpcbiAgICogQ+G7nSBuw6B5IGNo4buJIMSR4buDIMSRaeG7gXUga2hp4buDbiBsw7pjIHRow6ptLCBraMO0bmcgxJHGsOG7o2MgbMawdSBs4bqhaSB0cm9uZyBjw6J5LlxuICAgKi9cbiAga2VlcFBvc2l0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogxJBpIGvDqG0gc+G7sSBraeG7h24gYuG6pW0gbsO6dCBUSMOKTSB0csOqbiBt4buZdCBjb250YWluZXIuXG4gKlxuICogS2jDoWMgYFRfZ3JpZExheW91dF9hY3Rpb25FdmVudGAg4bufIGNo4buXIGBjb25maXJtYCBuaOG6rW4ga2jhu5FpIG114buRbiB0aMOqbTogdGjGsCB2aeG7h24ga2jDtG5nIGJp4bq/dCBz4bqjbiBwaOG6qW1cbiAqIGPhu6dhIGLhuqFuIGPDsyBuaOG7r25nIGxv4bqhaSBraOG7kWkgbsOgbywgbsOqbiBi4bqhbiBt4bufIG1lbnUgY2jhu41uIGxv4bqhaSBy4buTaSB0cnV54buBbiBraOG7kWkgxJHDoyBk4buxbmcgdsOgbyDEkcOieS5cbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2FkZEV2ZW50ID0ge1xuICAvKiogY29udGFpbmVyIG5nxrDhu51pIGTDuW5nIG114buRbiB0aMOqbSBraOG7kWkgdsOgbyAqL1xuICBub2RlSWQ6IHN0cmluZztcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB0aMawIHZp4buHbiBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIG7hur91IGtow7RuZyB0aMOqbSDEkcaw4bujYyAqL1xuICBjb25maXJtOiAoaXRlbTogVF9ncmlkTGF5b3V0X25ld05vZGUpID0+IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiDEkOG6p3UgdsOgbyBtw6AgdGjGsCB2aeG7h24gdHJ1eeG7gW4gY2hvIGNvbXBvbmVudCBj4bunYSBuxqFpIGTDuW5nLlxuICogQ29tcG9uZW50IELhuq5UIEJV4buYQyBraGFpIMSR4bunIGJhIGlucHV0IG7DoHkgKGTDuW5nIGBpbnB1dCgpYCksIHRoaeG6v3UgY8OhaSBuw6BvIHRow6wgYHNldElucHV0YCBuw6ltIGzhu5dpLlxuICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfbm9kZUlucHV0czxURGF0YSA9IHVua25vd24+ID0ge1xuICAvKiogxJHDum5nIGBub2RlLmRhdGFgIGPhu6dhIGto4buRaSDigJQgdGjhu6kgbsahaSBkw7luZyBj4bqnbiBuaOG6pXQsIG7Dqm4gxJHhu4MgxJHhuqd1ICovXG4gIGRhdGE6IFREYXRhO1xuICAvKiogY+G6oyBraOG7kWksIGtoaSBj4bqnbiBiaeG6v3QgaWQgwrcga8OtY2ggdGjGsOG7m2MgwrcgY8OzIHBo4bqjaSBjb250YWluZXIga2jDtG5nICovXG4gIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlO1xuICAvKiogxJFhbmcg4bufIGNo4bq/IMSR4buZIHPhu61hIGhheSBjaOG7iSB4ZW0gKi9cbiAgaXNFZGl0TW9kZTogYm9vbGVhbjtcbiAgLyoqIMSR4buZIHPDonU6IDAgPSBn4buRYywgMSA9IGto4buRaSBj4bqlcCB0cmFuZywgMiA9IGto4buRaSB0cm9uZyBjb250YWluZXIgKi9cbiAgZGVwdGg6IG51bWJlcjtcbn07XG5cbi8qKiBD4bqldSBow6xuaCBraOG7n2kgdOG6oW8gbeG7mXQgbeG6t3QgcGjhurNuZyBrw6lvIHRo4bqjICovXG5leHBvcnQgdHlwZSBUX2dyaWRMYXlvdXRfY29uZmlnID0ge1xuICAvKipcbiAgICogSMOgbSBQSMOCTiBHSeG6okkgY29tcG9uZW50IGNobyBt4buZdCBraOG7kWkg4oCUIGNo4buXIGLhuqFuIG1hcCB04burIGThu68gbGnhu4d1IHNlcnZlciBzYW5nIGdpYW8gZGnhu4duLlxuICAgKlxuICAgKiBN4bq3dCBwaOG6s25nIGfhu41pIGjDoG0gbsOgeSBjaG8gTeG7lkkga2jhu5FpIGtow7RuZyB04buxIGtoYWkgYGdldENvbXBvbmVudE91dGxldGAuIFRy4bqjIGBPYnNlcnZhYmxlYCBuw6puXG4gICAqIGBpbXBvcnQoKWAgxJHhu5luZyBjaOG6oXkgxJHGsOG7o2M6IGLDsyBtw6MgY+G7p2EgdOG7q25nIGxv4bqhaSBraOG7kWkgY2jhu4kgdOG6o2kga2hpIG3DoG4gdGjhuq10IHPhu7EgY8OzIGto4buRaSBsb+G6oWkgxJHDsy5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZ2V0Q29tcG9uZW50T3V0bGV0OiAobm9kZSkgPT4ge1xuICAgKiAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kYXRhIGFzIHsgdHlwZTogc3RyaW5nIH07XG4gICAqXG4gICAqICAgaWYgKHR5cGUgPT09ICdjaGFydCcpIHtcbiAgICogICAgIHJldHVybiBmcm9tKGltcG9ydCgnLi9jaGFydC1jYXJkLmNvbXBvbmVudCcpLnRoZW4oKGMpID0+IGMuQ2hhcnRDYXJkQ29tcG9uZW50KSk7XG4gICAqICAgfVxuICAgKlxuICAgKiAgIHJldHVybiBmcm9tKGltcG9ydCgnLi90ZXh0LWNhcmQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5UZXh0Q2FyZENvbXBvbmVudCkpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKSA9PiBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4+O1xuICAvKiogY8OieSBraOG7kWkgYmFuIMSR4bqndSAqL1xuICBkYXRhOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgbW9kZT86IEVfZ3JpZExheW91dF9tb2RlX3N0cmluZztcbiAgaXNFZGl0TW9kZT86IGJvb2xlYW47XG4gIC8qKiBz4buRIGPhu5l0IGPhu6dhIGzGsOG7m2kgKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDEyICovXG4gIGNvbHM/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZywgcHggKGNo4bq/IMSR4buZIGzGsOG7m2kpLiBN4bq3YyDEkeG7i25oIDU2ICovXG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIEPhuqRQIFRSQU5HLiBN4bq3YyDEkeG7i25oIDIuXG4gICAqXG4gICAqIMSQ4bq3dCBs4bubbiBoxqFuIGtoaSBtdeG7kW4gw7QgbGkgcGjhu6cga8OtbiBtw6BuIGjDrG5oIG5nYXkgY+G6oyBsw7pjIGLhu5EgY+G7pWMgY8OybiDDrXQga2jhu5FpIOKAlCBsxrDhu5tpIGNo4buJIGNhbyBi4bqxbmdcbiAgICoga2jhu5FpIGN14buRaSBjw7luZyB0aMOsIHBo4bqnbiBkxrDhu5tpIHRy4buRbmcgdHLGoW4sIG5nxrDhu51pIGTDuW5nIGtow7RuZyBiaeG6v3QgY8OybiB0aOG6oyDEkcaw4bujYyB2w6BvIMSRw6J1LlxuICAgKi9cbiAgbWluUm93cz86IG51bWJlcjtcbiAgLyoqIFPhu5EgaMOgbmcgVOG7kEkgVEhJ4buCVSBj4bunYSBsxrDhu5tpIGLDqm4gVFJPTkcgY29udGFpbmVyLiBN4bq3YyDEkeG7i25oIDEgKi9cbiAgbmVzdGVkTWluUm93cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIENobyBsxrDhu5tpIEzhu5JORyB04buxIMSRbyBs4bqhaSBraGkga2h1bmcgY2jhu6lhIG7DsyDEkeG7lWkgYuG7gSBy4buZbmcuIE3hurdjIMSR4buLbmggQuG6rFQuXG4gICAqXG4gICAqIFThuq90IMSRaSB0aMOsIGzDumMga8OpbyBtw6lwIGto4buRaSBjaGEsIHRo4bq7IGNvbiDEkeG7qW5nIGltIHThu5tpIGtoaSB0aOG6oyB0YXkg4oCUIGNo4buJIHThuq90IG7hur91IG7GoWkgZMO5bmcgdOG7sSBsb1xuICAgKiB2aeG7h2MgxJFvIGzhuqFpLlxuICAgKi9cbiAgYXV0b1Jlc2l6ZU5lc3RlZEdyaWRzPzogYm9vbGVhbjtcbiAgLyoqIGtoZSBnaeG7r2EgaGFpIGto4buRaSDhu58gbMaw4bubaSBD4bqkUCBUUkFORywgcHguIE3hurdjIMSR4buLbmggMTIgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKipcbiAgICogS2hlIE5Iw4xOIFRI4bqkWSBnaeG7r2EgaGFpIGto4buRaSBj4bqlcCB0cmFuZywgcHgg4oCUIHBo4bqnbiB24buPIGto4buRaSB0aOG7pXQgdsOgbyBu4butYSBraGUgbeG7l2kgY+G6oW5oLlxuICAgKlxuICAgKiDwn5S0IEtow6FjIGBtYXJnaW5gOiBgbWFyZ2luYCBsw6Aga2hlIGPhu6dhIMOUIEzGr+G7mkkgbsOqbiDEkeG7lWkgbsOzIGzDoCDEkeG7lWkgbHXDtG4gYsaw4bubYyBrw6lvIHbDoCBwaMOpcCB0w61uaCB2YVxuICAgKiBjaOG6oW0uIE114buRbiB0aOG6uyB0csO0bmcgdGjGsGEgcmEgbcOgIGLGsOG7m2Mga8OpbyBnaeG7ryBuZ3V5w6puIHRow6wgZMO5bmcgYHZpc3VhbEdhcGAg4oCUIMO0IGzGsOG7m2kga2jDtG5nIMSR4buVaSxcbiAgICogY2jhu4kgcGjhuqduIG5ow6xuIHRo4bqleSBjbyBs4bqhaS4gS2jDtG5nIGtoYWkgdGjDrCBraMO0bmcgw6FwIGfDrCAoZ2nhu68gxJHDum5nIGjDoG5oIHZpIGPFqSkuXG4gICAqXG4gICAqIENo4buJIMOhcCBjaG8ga2jhu5FpIEPhuqRQIEfhu5BDOyBraOG7kWkgY29uIHRyb25nIGNvbnRhaW5lciBnaeG7ryBuZ3V5w6puIMSR4buDIGtow7RuZyB0w6FjaCBy4budaSBjw6FjIGTDsm5nIGPhu6dhXG4gICAqIGPDuW5nIG3hu5l0IHRo4bq7LlxuICAgKi9cbiAgdmlzdWFsR2FwPzogbnVtYmVyO1xuICAvKioga2hlIGdp4buvYSBoYWkga2jhu5FpIGLDqm4gVFJPTkcgY29udGFpbmVyLCBweC4gTeG6t2MgxJHhu4tuaCAyIOKAlCBraOG7kWkgY29uIGzDoCBkw7JuZyB0aMO0bmcgdGluIGPhu6dhIGPDuW5nXG4gICAqICBt4buZdCBjYXJkLCBraGUgcuG7mW5nIGzDoG0gY2jDum5nIHRyw7RuZyBuaMawIGNhcmQgcuG7nWkgbmhhdSAqL1xuICBuZXN0ZWRNYXJnaW4/OiBudW1iZXI7XG4gIC8qKiBjaGnhu4F1IGNhbyBt4buZdCBow6BuZyBiw6puIFRST05HIGNvbnRhaW5lciwgcHguIE3hurdjIMSR4buLbmggMTYg4oCUIGjDoG5nIG5o4buPIGNobyBixrDhu5tjIGvDqW8gbeG7i24gKi9cbiAgbmVzdGVkUm93SGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogTOG7gSB0cm9uZyBj4bunYSBDT05UQUlORVIsIHB4IOKAlCDDoXAgxJHhu4F1IGLhu5FuIGNoaeG7gXUuIE3hurdjIMSR4buLbmggMTIuXG4gICAqXG4gICAqIENo4buJIGNvbnRhaW5lciBjw7MgbOG7gSBuw6B5OyBraOG7kWkgxJHGoW4ga2jDtG5nIGPDsywgdsOsIG7DsyBraMO0bmcgY2jhu6lhIGfDrCBiw6puIHRyb25nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBuw6puIMSR4buDIDA6IHRheSBj4bqnbSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2Ega2jhu5FpIGNvbiBu4bqxbSBzw6F0IGJpw6puIGNvbnRhaW5lciwga2jDtG5nIGNo4burYSBs4buBXG4gICAqIHRow6wgY2h14buZdCBraMO0bmcgdHLDum5nIMSRxrDhu6NjIG7DsyB2w6Aga2jhu5FpIGNvbiBt4bqldCBsdcO0biBraOG6oyBuxINuZyByZXNpemUuXG4gICAqL1xuICBjb250YWluZXJQYWRkaW5nPzogbnVtYmVyO1xuICAvKiogdmnhu4FuIG5nb8OgaSBxdWFuaCBsxrDhu5tpIGPhuqVwIHRyYW5nLiBN4bq3YyDEkeG7i25oIGLhuq10ICovXG4gIG91dGVyTWFyZ2luPzogYm9vbGVhbjtcbiAgLyoqIGNo4burYSB0aMOqbSBiYW8gbmhpw6p1IHB4IGTGsOG7m2kgxJHDoXkgbMaw4bubaSBj4bqlcCB0cmFuZy4gTeG6t2MgxJHhu4tuaCA0MCAqL1xuICBvdXRlck1hcmdpbkJvdHRvbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEzhu4EgVFLDik4gY+G7p2EgbMaw4bubaSBj4bqlcCB0cmFuZywgcHgg4oCUIGNo4buXIHRy4buRbmcgcGjDrWEgdHLDqm4gaMOgbmcgMC5cbiAgICpcbiAgICog8J+UtCBLaGFpIHPhu5EgbsOgeSB0aGF5IHbDrCBs4bqleSBgcGFkZGluZ2AgY+G7p2Ega2h1bmcgYuG7jWMga2hpIG7GoWkgZMO5bmcgxJHDoyDEkeG6qXkgdsO5bmcgY3Xhu5luIHbDoG8gdHJvbmdcbiAgICogYDxncmlkc3Rlcj5gOiBraG/huqNuZyB0cuG7kW5nIMSRw7MgcGjhuqNpIG7hurFtIFRST05HIGjhu4cgdG/huqEgxJHhu5kgY+G7p2EgZ3JpZHN0ZXIgdGjDrCB0aMawIHZp4buHbiBt4bubaSB0w61uaCDEkcO6bmdcbiAgICogKGBncmlkc3RlclJlbmRlcmVyLmdldE1hcmdpblRvcGApIHbDoCBrw6lv4oCTdGjhuqMgbeG7m2kga2jDtG5nIGzhu4djaC4gxJDhurd0IOG7nyBraHVuZyBi4buNYyB0aMOsIG3DqXAgdHLDqm4gY+G7p2FcbiAgICogZ3JpZHN0ZXIgY+G6r3QgbeG6pXQgbeG7jWkgdGjhu6kgdGjDsiBsw6puIOKAlCB0aGFuaCBjw7RuZyBj4bulIGPhu6dhIGto4buRaSDhu58gaMOgbmcgMCB0cmVvIOG7nyBgdG9wOiAtMjJweGAgYmnhur9uIG3huqV0LlxuICAgKi9cbiAgb3V0ZXJNYXJnaW5Ub3A/OiBudW1iZXI7XG4gIC8qKiBz4buRIGjDoG5nIHThu5FpIHRoaeG7g3UgbeG7mXQga2jhu5FpIMSRxrDhu6NjIGNvIGzhuqFpLiBN4bq3YyDEkeG7i25oIDIgKi9cbiAgbWluSXRlbVJvd3M/OiBudW1iZXI7XG4gIC8qKiBrw61jaCB0aMaw4bubYyBt4bq3YyDEkeG7i25oIGPhu6dhIGto4buRaSBt4bubaSwgdMOtbmggdGhlbyDDtCBsxrDhu5tpLiBN4bq3YyDEkeG7i25oIDMgY+G7mXQgw5cgMiBow6BuZyAqL1xuICBkZWZhdWx0SXRlbUNvbHM/OiBudW1iZXI7XG4gIGRlZmF1bHRJdGVtUm93cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIENobyBwaMOpcCBoYWkga2jhu5FpIEtIw4FDIGBsYXllckluZGV4YCBu4bqxbSBjaOG7k25nIG5oYXUuXG4gICAqIENo4bq/IMSR4buZIGB0dURvYCBsdcO0biBi4bqtdCwga2jDtG5nIMSR4buNYyBj4budIG7DoHkuXG4gICAqL1xuICBhbGxvd092ZXJsYXA/OiBib29sZWFuO1xuICAvKiogdHLhuqduIHPhu5EgY+G6pXAgY29udGFpbmVyIGzhu5NuZyBuaGF1LiBN4bq3YyDEkeG7i25oIDEgKGNvbnRhaW5lciBraMO0bmcgY2jhu6lhIGNvbnRhaW5lcikgKi9cbiAgbWF4Q29udGFpbmVyRGVwdGg/OiBudW1iZXI7XG4gIC8qKiBC4bqtdCB0w61uaCBuxINuZyB0aHUgcGjDs25nICh6b29tKSBjYW52YXMuIE3hurdjIMSR4buLbmggZmFsc2UgKi9cbiAgZW5hYmxlWm9vbT86IGJvb2xlYW47XG4gIC8qKiBU4bu3IGzhu4cgdGh1IHBow7NuZyBiYW4gxJHhuqd1LiBN4bq3YyDEkeG7i25oIDEgKDEwMCUpICovXG4gIGluaXRpYWxab29tPzogbnVtYmVyO1xuICAvKiogR2nhu5tpIGjhuqFuIHRodSBwaMOzbmcgdOG7kWkgdGhp4buDdS4gTeG6t2MgxJHhu4tuaCAwLjQgKDQwJSkgKi9cbiAgem9vbU1pbj86IG51bWJlcjtcbiAgLyoqIEdp4bubaSBo4bqhbiB0aHUgcGjDs25nIHThu5FpIMSRYS4gTeG6t2MgxJHhu4tuaCAxLjUgKDE1MCUpICovXG4gIHpvb21NYXg/OiBudW1iZXI7XG4gIC8qKiBCxrDhu5tjIG5o4bqjeSBt4buXaSBs4bqnbiB0xINuZy9naeG6o20gdGh1IHBow7NuZy4gTeG6t2MgxJHhu4tuaCAwLjA1ICg1JSkgKi9cbiAgem9vbVN0ZXA/OiBudW1iZXI7XG4gIC8qKiBDaGnhu4F1IHLhu5luZyBjaHXhuqluIGPhu6dhIGNhbnZhcyBzdGFnZSwgcHguIE3hurdjIMSR4buLbmggMTY2OCAqL1xuICBzdGFnZVdpZHRoPzogbnVtYmVyO1xuICAvKiogQ2hp4buBdSBjYW8gdOG7kWkgdGhp4buDdSBj4bunYSBjYW52YXMgc3RhZ2UsIHB4LiBN4bq3YyDEkeG7i25oIDkzNyAqL1xuICBzdGFnZU1pbkhlaWdodD86IG51bWJlcjtcbiAgLyoqIEtow7NhIGzGsHUgdOG7tyBs4buHIHRodSBwaMOzbmcgdsOgbyBsb2NhbFN0b3JhZ2UgKHZkICdvY2JfYmlfY2FudmFzX3pvb20nKSAqL1xuICBzdG9yYWdlS2V5Pzogc3RyaW5nO1xuICAvKiogVOG7sSDEkeG7mW5nIHbhu6thIG3DoG4gaMOsbmgga2hpIHThuqNpIHRyYW5nIGzhuqduIMSR4bqndSBu4bq/dSBraHVuZyBuaMOsbiBuaOG7jyBoxqFuIHN0YWdlLiBN4bq3YyDEkeG7i25oIHRydWUgKi9cbiAgYXV0b0ZpdE9uTG9hZD86IGJvb2xlYW47XG59O1xuXG4vKiogTOG7sWEgY2jhu41uIHThu7cgbOG7hyB0aHUgcGjDs25nIHRyw6puIG1lbnUgZHJvcGRvd24gKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF96b29tUHJlc2V0ID0ge1xuICAvKiogS2hvw6EgaTE4biwgS0jDlE5HIHBo4bqjaSBjaOG7ryBoaeG7g24gdGjhu4sg4oCUIHRlbXBsYXRlIGThu4tjaCBxdWEgYHRyYW5zbGF0ZWAgcGlwZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn07XG5cbi8qKiBT4buxIGtp4buHbiB0aMawIHZp4buHbiBi4bqvbiByYSBraGkgYuG7kSBj4bulYyDEkeG7lWkgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9jaGFuZ2VFdmVudCA9IHtcbiAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGU7XG4gIC8qKiBraOG7kWkgduG7q2EgYuG7iyB0w6FjIMSR4buZbmc7IGLhu48gdHLhu5FuZyBraGkgxJHhu5VpIGRp4buHbiBy4buZbmcgKHPhuq9wIGfhu41uLCBu4bqhcCBs4bqhaSkgKi9cbiAgbm9kZUlkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBC4buRaSBj4bqjbmggdHJ1eeG7gW4gdsOgbyBgdGVtcGxhdGVUb29sYmFyYCDigJQgdGVtcGxhdGUgdOG7sSB24bq9IHRoYW5oIGPDtG5nIGPhu6UgdGhheSBi4buZIG7DunQgbeG6t2MgxJHhu4tuaC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bmctdGVtcGxhdGUgI3Rvb2xiYXIgbGV0LW5vZGUgbGV0LWN0eD1cImN0eFwiPlxuICogICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gKiAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZW1vdmUnXCJcbiAqICAgICAob3V0Q2xpY2spPVwiY3R4LnJlbW92ZSgpXCIgLz5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X3Rvb2xiYXJDb250ZXh0ID0ge1xuICAvKioga2jhu5FpIMSRYW5nIHbhur0g4oCUIGTDuW5nIGBsZXQtbm9kZWAgdHJvbmcgdGVtcGxhdGUgKi9cbiAgJGltcGxpY2l0OiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgLyoqIGto4buRaSBuw6B5IGzDoCBjb250YWluZXIgKGPDsyBydeG7mXQpIGhheSBraOG7kWkgxJHGoW4gKi9cbiAgaXNDb250YWluZXI6IGJvb2xlYW47XG4gIC8qKiBjw7JuIHRow6ptIMSRxrDhu6NjIGto4buRaSB2w6BvIHRyb25nIGtow7RuZyAoY2jGsGEgY2jhuqFtIHRy4bqnbiBs4buTbmcgY+G6pXApICovXG4gIGNhbkFkZEluc2lkZTogYm9vbGVhbjtcbiAgLyoqIMSR4buVaSDEkcaw4bujYyBnaeG7r2Ega2jhu5FpIMSRxqFuIOKGlCBraOG7kWkgZ2jDqXAga2jDtG5nICovXG4gIGNhblRvZ2dsZVR5cGU6IGJvb2xlYW47XG4gIC8qKiBn4buNaSDEkeG7gyB0aMawIHZp4buHbiBwaMOhdCBgb3V0UmVtb3ZlTm9kZWAgbmjGsCBraGkgYuG6pW0gbsO6dCB4b8OhIG3hurdjIMSR4buLbmggKi9cbiAgcmVtb3ZlOiAoKSA9PiB2b2lkO1xuICAvKiogZ+G7jWkgxJHhu4MgdGjGsCB2aeG7h24gcGjDoXQgYG91dEFkZEJsb2NrSW5zaWRlYCAqL1xuICBhZGRJbnNpZGU6ICgpID0+IHZvaWQ7XG4gIC8qKiBn4buNaSDEkeG7gyB0aMawIHZp4buHbiBwaMOhdCBgb3V0VG9nZ2xlVHlwZWAgKi9cbiAgdG9nZ2xlVHlwZTogKCkgPT4gdm9pZDtcbn07XG5cbi8qKiBLaHVuZyB4ZW0gdHLGsOG7m2MgKGdob3N0IHByZXZpZXcpIGtoaSBrw6lvIHRo4bq7IHThu6sgYsOqbiBuZ2/DoGkgdsOgbyBjYW52YXMgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9kcm9wR2hvc3QgPSB7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG4gIHBpeGVsTGVmdDogbnVtYmVyO1xuICBwaXhlbFRvcDogbnVtYmVyO1xuICBwaXhlbFdpZHRoOiBudW1iZXI7XG4gIHBpeGVsSGVpZ2h0OiBudW1iZXI7XG4gIGlzSW5zaWRlR3JvdXA6IGJvb2xlYW47XG4gIHRhcmdldFBhcmVudElkPzogc3RyaW5nO1xuICBncm91cFRpdGxlPzogc3RyaW5nO1xuICBjYXJkVGl0bGU6IHN0cmluZztcbiAgY2FyZEljb25UZXh0Pzogc3RyaW5nO1xuICBjYXJkSWNvbkNsYXNzPzogc3RyaW5nO1xuICBob3ZlcmVkR3JpZHN0ZXI/OiBIVE1MRWxlbWVudDtcbn07XG5cbi8qKiBT4buxIGtp4buHbiBwaMOhdCByYSBraGkgdGjhuqMgbeG7mXQgdGjhursgbeG7m2kgdOG7qyBiw6puIG5nb8OgaSB2w6BvIGNhbnZhcyAqL1xuZXhwb3J0IHR5cGUgVF9ncmlkTGF5b3V0X2Ryb3BFdmVudCA9IHtcbiAgbm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICBjb2w6IG51bWJlcjtcbiAgcm93OiBudW1iZXI7XG4gIGNvbHM6IG51bWJlcjtcbiAgcm93czogbnVtYmVyO1xuICByYXdFdmVudDogRHJhZ0V2ZW50O1xuICBwYXlsb2FkPzogdW5rbm93bjtcbn07XG5cbi8qKiBE4buvIGxp4buHdSBj4bunYSB0aOG6uyBrw6lvIHThu6sgYsOqbiBuZ2/DoGkgdsOgbyBjYW52YXMgKi9cbmV4cG9ydCB0eXBlIFRfZ3JpZExheW91dF9leHRlcm5hbERyYWdQYXlsb2FkID0ge1xuICBraW5kPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgY29scz86IG51bWJlcjtcbiAgcm93cz86IG51bWJlcjtcbiAgaWNvblRleHQ/OiBzdHJpbmc7XG4gIGljb25DbGFzcz86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogS2jhu5FpIG7DoHkgY8OzIMSRxrDhu6NjIHRo4bqjIFbDgE8gVFJPTkcgbeG7mXQga2jhu5FpIGdow6lwIGtow7RuZy4gQuG7jyB0cuG7kW5nID0gxJHGsOG7o2MgKGdp4buvIG5ndXnDqm4gaMOgbmggdmkgY8WpKS5cbiAgICpcbiAgICog8J+UtCBLaGFpIGBmYWxzZWAgY2hvIHRo4bupIG3DoCBuxqFpIGTDuW5nIHPhur0gdOG7qyBjaOG7kWkga2hpIHRo4bqjICh2ZCBjaMOtbmgga2jhu5FpIGdow6lwIOKAlCBs4buTbmcga2jhu5FpIGdow6lwIHbDoG9cbiAgICoga2jhu5FpIGdow6lwKS4gVGhp4bq/dSBj4budIG7DoHkgdGjDrCB0aMawIHZp4buHbiB24bqrbiB0w7Qgw7QgbGkgbMOqbiBraOG7kWkgZ2jDqXAgxJFhbmcgcsOqIHF1YSwgbeG7nWkgbmfGsOG7nWkgZMO5bmcgdGjhuqNcbiAgICogdsOgbyBjaOG7lyBtw6AgbsahaSBkw7luZyBjaOG6r2MgY2jhuq9uIGNo4buRaSDigJQgdGjhuqMgeG9uZyBraOG7kWkgbmjhuqN5IHJhIG5nb8OgaSAobmfGsOG7nWkgZMO5bmcgY2jhu4kgcmEgMTUvMDkvMjAyNikuXG4gICAqL1xuICBjYW5Ecm9wSW5zaWRlQ29udGFpbmVyPzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbiJdfQ==