diff --git a/cordova-plugin-hms-push/OpenSourceSoftwareNotice.html b/cordova-plugin-hms-push/OpenSourceSoftwareNotice.html
index bc14e29d..8e907ced 100644
--- a/cordova-plugin-hms-push/OpenSourceSoftwareNotice.html
+++ b/cordova-plugin-hms-push/OpenSourceSoftwareNotice.html
@@ -14,7 +14,7 @@
Copyright Notice and License Texts
-Software: com.facebook.fresco:fresco 2.6.0
+Software: com.facebook.fresco:fresco 3.1.3
Copyright notice:
diff --git a/cordova-plugin-hms-push/README.md b/cordova-plugin-hms-push/README.md
index df121d8c..37bb3fe1 100644
--- a/cordova-plugin-hms-push/README.md
+++ b/cordova-plugin-hms-push/README.md
@@ -1,12 +1,17 @@
-# Cordova HMS Push
+
+
Cordova HMS Push
+
-Cordova Push Kit is a messaging service provided for you. It establishes a messaging channel from
-the cloud to devices. By integrating Cordova Push Kit, you can send messages to your apps on users'
-devices in real time. This helps you maintain closer ties with users and increases user awareness of
-and engagement with your apps.
-This plugin enables communication between Huawei Push SDK and Cordova platform. It exposes all
-functionality provided by Huawei Push SDK.
+
+
+
+
+
+
+----
+
+This plugin enables communication between Huawei Ads SDK and Cordova platform. It exposes all functionality provided by Huawei Ads SDK.
[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050136388?ha_source=hms1)
diff --git a/cordova-plugin-hms-push/example/cordova/README.md b/cordova-plugin-hms-push/example/cordova/README.md
index 5e2154e8..7aa8ee09 100644
--- a/cordova-plugin-hms-push/example/cordova/README.md
+++ b/cordova-plugin-hms-push/example/cordova/README.md
@@ -19,7 +19,45 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
## 2. Installation Guide
-### 2.1. Cordova
+Before you get started, you must register as a HUAWEI Developer and complete identity verification
+on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For
+details, please refer
+to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).
+
+### 2.1. Creating a Project in AppGallery Connect
+
+Creating an app in AppGallery Connect is required in order to communicate with the Huawei services.
+To create an app, perform the following steps:
+
+1. Sign in
+ to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)
+ and select **My projects**.
+2. Select your project from the project list or create a new one by clicking the **Add Project**
+ button.
+3. Go to **Project Setting** > **General information**, and click **Add app**.
+ - If an app exists in the project and you need to add a new one, expand the app selection area
+ on the top of the page and click **Add app**.
+4. On the **Add app** page, enter the app information, and click **OK**.
+
+### 2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json
+
+A signing certificate fingerprint is used to verify the authenticity of an app when it attempts to
+access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally
+generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can
+refer to 3rd and 4th steps
+of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html#2?ha_source=hms1)
+Codelab tutorial for the certificate generation. Perform the following steps after you have
+generated the certificate.
+
+1. Sign in
+ to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)
+ and select your project from **My Projects**. Then go to **Project Setting** > **General
+ information**. In the **App information** field, click the icon next to SHA-256 certificate
+ fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.
+2. After completing the configuration, click **OK** to save the changes. (Check mark icon)
+3. In the same page, click **agconnect-services.json** button to download the configuration file.
+
+### 2.3. Cordova
1. Install Cordova CLI.
@@ -91,6 +129,26 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
## 3. Configuration and Description
+### Configuring Obfuscation Scripts
+
+Before building the APK, configure the obfuscation configuration file to prevent the HMS Core SDK from being obfuscated.
+
+**NOTE**: This step is required only if you want to minify and obfuscate your app. By default obfuscation is disabled in Cordova and Ionic apps.
+
+The obfuscation is done by **ProGuard.** By default, in Cordova and Ionic apps ProGuard is disabled. Even though ProGuard is not available, ProGuard support can be added through 3rd party ProGuard plugins. If ProGuard is enabled in your project, the Huawei IAP plugin's ProGuard rules need to be added to your project. These rules are as follows:
+
+```text
+-ignorewarnings
+-keepattributes *Annotation*
+-keepattributes Exceptions
+-keepattributes InnerClasses
+-keepattributes Signature
+-keep class com.huawei.hianalytics.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+-repackageclasses
+```
+
---
## 4. Questions or Issues
diff --git a/cordova-plugin-hms-push/example/cordova/config.xml b/cordova-plugin-hms-push/example/cordova/config.xml
index 0af51515..3ff7d245 100644
--- a/cordova-plugin-hms-push/example/cordova/config.xml
+++ b/cordova-plugin-hms-push/example/cordova/config.xml
@@ -1,5 +1,5 @@
-
+
CordovaHMSPushDemo
diff --git a/cordova-plugin-hms-push/example/cordova/package.json b/cordova-plugin-hms-push/example/cordova/package.json
index 38e73925..0685d17c 100644
--- a/cordova-plugin-hms-push/example/cordova/package.json
+++ b/cordova-plugin-hms-push/example/cordova/package.json
@@ -1,7 +1,7 @@
{
"name": "CordovaHMSPushDemo",
"displayName": "CordovaHMSPushDemo",
- "version": "6.12.0-300",
+ "version": "6.12.0-302",
"description": "A demo application which shows the usage of HMS Push SDK",
"main": "index.js",
"scripts": {
diff --git a/cordova-plugin-hms-push/example/ionic/README.md b/cordova-plugin-hms-push/example/ionic/README.md
index c072c9ab..7562f508 100644
--- a/cordova-plugin-hms-push/example/ionic/README.md
+++ b/cordova-plugin-hms-push/example/ionic/README.md
@@ -1,4 +1,4 @@
-# HMS Push Cordova Demo
+# HMS Push Ionic Demo
## Contents
@@ -21,21 +21,61 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
## 2. Installation Guide
-### 2.1. Ionic
+Before you get started, you must register as a HUAWEI Developer and complete identity verification
+on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For
+details, please refer
+to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).
-1. Install Ionic CLI.
+### 2.1. Creating a Project in AppGallery Connect
+
+Creating an app in AppGallery Connect is required in order to communicate with the Huawei services.
+To create an app, perform the following steps:
+
+1. Sign in
+ to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)
+ and select **My projects**.
+2. Select your project from the project list or create a new one by clicking the **Add Project**
+ button.
+3. Go to **Project Setting** > **General information**, and click **Add app**.
+ - If an app exists in the project and you need to add a new one, expand the app selection area
+ on the top of the page and click **Add app**.
+4. On the **Add app** page, enter the app information, and click **OK**.
+
+### 2.2. Configuring the Signing Certificate Fingerprint and Obtaining agconnect-services.json
+
+A signing certificate fingerprint is used to verify the authenticity of an app when it attempts to
+access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally
+generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can
+refer to 3rd and 4th steps
+of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html#2?ha_source=hms1)
+Codelab tutorial for the certificate generation. Perform the following steps after you have
+generated the certificate.
+
+1. Sign in
+ to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)
+ and select your project from **My Projects**. Then go to **Project Setting** > **General
+ information**. In the **App information** field, click the icon next to SHA-256 certificate
+ fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.
+2. After completing the configuration, click **OK** to save the changes. (Check mark icon)
+3. In the same page, click **agconnect-services.json** button to download the configuration file.
+
+### 2.3. Ionic
+
+1. Install Ionic CLI and other required tools if haven't done before.
```bash
- npm install -g @ionic/cli
+ npm install -g @ionic/cli cordova-res native-run
```
-2. Create a new Ionic project or use existing Ionic project.
+2. Open the demo project's root directory.
+
+3. Install project dependencies.
-- To create a new Ionic project, you can use **`ionic start [options]`** command.
- For more details please
- follow [ionic start - Ionic Documentation](https://ionicframework.com/docs/cli/commands/start).
+ ```bash
+ npm install
+ ```
-#### 2.1.1. With Cordova Runtime
+#### 2.3.1. Ionic with Cordova Runtime
1. Enable the **Cordova integration** if haven't done before.
@@ -72,7 +112,7 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
5. If you want to enable Ionic Native support then run the following command.
```bash
- npm install @ionic-native/core @hmscore/ionic-native-hms-push
+ npm install @awesome-cordova-plugins/core @hmscore/ionic-native-hms-push
```
6. Copy **`agconnect-services.json`** file to **`/android/app`** directory.
@@ -110,7 +150,7 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
ionic cordova run android --device
```
-#### 2.1.2. With Capacitor Runtime
+#### 2.3.2. With Capacitor Runtime
1. Enable the **Capacitor integration** if haven't done before.
@@ -142,7 +182,7 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
4. If you want to enable Ionic Native support then run the following command.
```bash
- npm install @ionic-native/core @hmscore/ionic-native-hms-push
+ npm install @awesome-cordova-plugins/core @hmscore/ionic-native-hms-push
```
5. Build Ionic app to generate resource files.
@@ -219,7 +259,7 @@ This demo application demonstrates the usage of HMS Push Cordova Plugin.
/*
*/
- classpath 'com.huawei.agconnect:agcp:1.9.1.300'
+ classpath 'com.huawei.agconnect:agcp:1.9.1.301'
}
}
diff --git a/cordova-plugin-hms-push/example/ionic/package.json b/cordova-plugin-hms-push/example/ionic/package.json
index 325f7328..ba848504 100644
--- a/cordova-plugin-hms-push/example/ionic/package.json
+++ b/cordova-plugin-hms-push/example/ionic/package.json
@@ -1,6 +1,6 @@
{
"name": "HMSPushDemo",
- "version": "6.12.0-300",
+ "version": "6.12.0-302",
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -17,12 +17,12 @@
"@angular/platform-browser": "15.0.0",
"@angular/platform-browser-dynamic": "15.0.0",
"@angular/router": "15.0.0",
- "@ionic-native/core": "^5.36.0",
- "@ionic-native/splash-screen": "5.36.0",
- "@ionic-native/status-bar": "5.36.0",
- "@ionic/angular": "6.1.9",
+ "@awesome-cordova-plugins/core": "6.4.0",
+ "@awesome-cordova-plugins/splash-screen": "6.4.0",
+ "@awesome-cordova-plugins/status-bar": "6.4.0",
+ "@ionic/angular": "7.6.0",
"@ionic/cordova-builders": "^9.0.0",
- "rxjs": "6.6.0",
+ "rxjs": "7.8.0",
"tslib": "2.3.0",
"zone.js": "0.11.4"
},
diff --git a/cordova-plugin-hms-push/example/ionic/src/app/app.component.spec.ts b/cordova-plugin-hms-push/example/ionic/src/app/app.component.spec.ts
index a1f091a7..0068bc39 100644
--- a/cordova-plugin-hms-push/example/ionic/src/app/app.component.spec.ts
+++ b/cordova-plugin-hms-push/example/ionic/src/app/app.component.spec.ts
@@ -18,8 +18,8 @@ import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
import { TestBed, async } from "@angular/core/testing";
import { Platform } from "@ionic/angular";
-import { SplashScreen } from "@ionic-native/splash-screen/ngx";
-import { StatusBar } from "@ionic-native/status-bar/ngx";
+import { SplashScreen } from "@awesome-cordova-plugins/splash-screen/ngx";
+import { StatusBar } from "@awesome-cordova-plugins/status-bar/ngx";
import { AppComponent } from "./app.component";
diff --git a/cordova-plugin-hms-push/example/ionic/src/app/app.component.ts b/cordova-plugin-hms-push/example/ionic/src/app/app.component.ts
index 16bcb2fd..d88fa8eb 100644
--- a/cordova-plugin-hms-push/example/ionic/src/app/app.component.ts
+++ b/cordova-plugin-hms-push/example/ionic/src/app/app.component.ts
@@ -17,8 +17,8 @@
import { Component } from "@angular/core";
import { Platform } from "@ionic/angular";
-import { SplashScreen } from "@ionic-native/splash-screen/ngx";
-import { StatusBar } from "@ionic-native/status-bar/ngx";
+import { SplashScreen } from "@awesome-cordova-plugins/splash-screen/ngx";
+import { StatusBar } from "@awesome-cordova-plugins/status-bar/ngx";
@Component({
selector: "app-root",
diff --git a/cordova-plugin-hms-push/example/ionic/src/app/app.module.ts b/cordova-plugin-hms-push/example/ionic/src/app/app.module.ts
index ade9a216..f9a93271 100644
--- a/cordova-plugin-hms-push/example/ionic/src/app/app.module.ts
+++ b/cordova-plugin-hms-push/example/ionic/src/app/app.module.ts
@@ -19,8 +19,8 @@ import { BrowserModule } from "@angular/platform-browser";
import { RouteReuseStrategy } from "@angular/router";
import { IonicModule, IonicRouteStrategy } from "@ionic/angular";
-import { SplashScreen } from "@ionic-native/splash-screen/ngx";
-import { StatusBar } from "@ionic-native/status-bar/ngx";
+import { SplashScreen } from "@awesome-cordova-plugins/splash-screen/ngx";
+import { StatusBar } from "@awesome-cordova-plugins/status-bar/ngx";
import { AppComponent } from "./app.component";
import { AppRoutingModule } from "./app-routing.module";
diff --git a/cordova-plugin-hms-push/example/ionic/src/app/home/home.page.ts b/cordova-plugin-hms-push/example/ionic/src/app/home/home.page.ts
index f83350be..dd313703 100644
--- a/cordova-plugin-hms-push/example/ionic/src/app/home/home.page.ts
+++ b/cordova-plugin-hms-push/example/ionic/src/app/home/home.page.ts
@@ -94,6 +94,14 @@ export class HomePage {
this.hmsPushEvent.onPushMessageSentError((result) => {
this.addLog("ON_PUSH_MESSAGE_SENT_ERROR", JSON.stringify(result));
});
+
+ this.hmsPushEvent.onMultiSenderTokenReceivedEvent((result) => {
+ this.addLog("ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT", JSON.stringify(result));
+ });
+
+ this.hmsPushEvent.onMultiSenderTokenErrorEvent((result) => {
+ this.addLog("ON_MULTI_SENDER_TOKEN_ERROR_EVENT", JSON.stringify(result));
+ });
}
openCustomIntent() {
diff --git a/cordova-plugin-hms-push/hooks/after_plugin_install.js b/cordova-plugin-hms-push/hooks/after_plugin_install.js
index e88c6025..70ae3253 100644
--- a/cordova-plugin-hms-push/hooks/after_plugin_install.js
+++ b/cordova-plugin-hms-push/hooks/after_plugin_install.js
@@ -45,7 +45,7 @@ module.exports = function (context) {
function addAGConnectDependency(lines) {
var AG_CONNECT_DEPENDENCY =
- "classpath 'com.huawei.agconnect:agcp:1.9.1.300' " + COMMENT;
+ "classpath 'com.huawei.agconnect:agcp:1.9.1.301' " + COMMENT;
var pattern =
/(\s*)classpath(\s+)[\',\"]com.android.tools.build:gradle.*[^\]\n]/m;
var index;
diff --git a/cordova-plugin-hms-push/ionic-native/dist/README.md b/cordova-plugin-hms-push/ionic-native/dist/README.md
index 206dbc75..cc02bb46 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/README.md
+++ b/cordova-plugin-hms-push/ionic-native/dist/README.md
@@ -1,4 +1,15 @@
-# Ionic Native HMS Push
+
+
Ionic Native HMS Push
+
+
+
+
+
+
+
+
+
+----
## 1. About
@@ -16,7 +27,7 @@ $ ionic cordova plugin add @hmscore/cordova-plugin-hms-push
```
```bash
-$ npm install @ionic-native/core @hmscore/ionic-native-hms-push
+$ npm install @awesome-cordova-plugins/core @hmscore/ionic-native-hms-push
```
### 2.2 With Capacitor Runtime
@@ -26,19 +37,28 @@ $ npm install @hmscore/cordova-plugin-hms-push
```
```bash
-$ npm install @ionic-native/core @hmscore/ionic-native-hms-push
+$ npm install @awesome-cordova-plugins/core @hmscore/ionic-native-hms-push
```
---
-## 3. Developer Documents
+## 3. Usage Documentation
+
+- [GitHub repository](https://github.com/HMS-Core/hms-cordova-plugin)
+
+- [API reference and sample codes](https://github.com/HMS-Core/hms-cordova-plugin/blob/master/cordova-plugin-hms-push/README.md#3-api-reference)
+
+---
+
+## 4. Sample Project
-You can find the development guide, API reference, and sample project on
-the [HMS Core](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) page.
+You can find the sample projects
+on [HMS Core > Samples > In-App Purchases](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1)
+page.
---
-## 4. Questions or Issues
+## 5. Questions or Issues
If you have questions about how to use HMS samples, try the following options:
diff --git a/cordova-plugin-hms-push/ionic-native/dist/index.d.ts b/cordova-plugin-hms-push/ionic-native/dist/index.d.ts
index eee0a52d..974dd0f5 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/index.d.ts
+++ b/cordova-plugin-hms-push/ionic-native/dist/index.d.ts
@@ -14,8 +14,8 @@
limitations under the License.
*/
-import { IonicNativePlugin } from "@ionic-native/core";
-export declare class HmsPushOriginal extends IonicNativePlugin {
+import { AwesomeCordovaNativePlugin } from "@awesome-cordova-plugins/core";
+export declare class HmsPushOriginal extends AwesomeCordovaNativePlugin {
HmsPushResultCode: typeof HmsPushResultCode;
CordovaRemoteMessage: typeof CordovaRemoteMessage;
RemoteMessageBuilder: typeof RemoteMessageBuilder;
@@ -113,16 +113,14 @@ export declare class HmsPushOriginal extends IonicNativePlugin {
removeItem(key: string): Promise;
removeBackgroundFile(): Promise;
}
-export declare class HmsLocalNotificationOriginal extends IonicNativePlugin {
+export declare class HmsLocalNotificationOriginal extends AwesomeCordovaNativePlugin {
Attr: typeof Attr;
Importance: typeof Importance;
Priority: typeof Priority;
RepeatType: typeof RepeatType;
Visibility: typeof Visibility;
localNotification(localNotification: LocalNotificationObject): Promise;
- localNotificationSchedule(
- localNotification: LocalNotificationObject
- ): Promise;
+ localNotificationSchedule(localNotification: LocalNotificationObject): Promise;
cancelAllNotifications(): Promise;
cancelNotifications(): Promise;
cancelScheduledNotifications(): Promise;
@@ -136,7 +134,7 @@ export declare class HmsLocalNotificationOriginal extends IonicNativePlugin {
channelBlocked(channelId: string): Promise;
deleteChannel(channelId: string): Promise;
}
-export declare class HmsPushEventOriginal extends IonicNativePlugin {
+export declare class HmsPushEventOriginal extends AwesomeCordovaNativePlugin {
onRemoteMessageReceived(callback: (data: any) => void): void;
onTokenReceived(callback: (data: any) => void): void;
onTokenError(callback: (data: any) => void): void;
@@ -158,7 +156,7 @@ export declare class HmsPushEventOriginal extends IonicNativePlugin {
ON_MULTI_SENDER_TOKEN_ERROR_EVENT: string;
ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT: string;
}
-export declare class HmsPushProfileOriginal extends IonicNativePlugin {
+export declare class HmsPushProfileOriginal extends AwesomeCordovaNativePlugin {
HUAWEI_PROFILE: number;
CUSTOM_PROFILE: number;
UNDEFINED_PROFILE: number;
@@ -167,16 +165,9 @@ export declare class HmsPushProfileOriginal extends IonicNativePlugin {
*/
isSupportProfile(): Promise;
addProfile(type: number, profileId: string): Promise;
- addProfileWithSubjectId(
- subjectId: string,
- type: number,
- profileId: string
- ): Promise;
+ addProfileWithSubjectId(subjectId: string, type: number, profileId: string): Promise;
deleteProfile(profileId: string): Promise;
- deleteProfileWithSubjectId(
- subjectId: string,
- profileId: string
- ): Promise;
+ deleteProfileWithSubjectId(subjectId: string, profileId: string): Promise;
}
export declare enum HmsPushResultCode {
SUCCESS = "0",
@@ -220,7 +211,7 @@ export declare enum HmsPushResultCode {
ERROR_CERT_FINGERPRINT_ERROR = "6003",
ERROR_PERMISSION_NOT_EXIST = "6004",
ERROR_PERMISSION_NOT_AUTHORIZED = "6005",
- ERROR_PERMISSION_EXPIRED = "6006",
+ ERROR_PERMISSION_EXPIRED = "6006"
}
export declare enum Attr {
id = "id",
@@ -259,7 +250,7 @@ export declare enum Attr {
priority = "priority",
importance = "importance",
visibility = "visibility",
- data = "data",
+ data = "data"
}
export declare enum Importance {
MAX = "max",
@@ -268,26 +259,26 @@ export declare enum Importance {
LOW = "low",
MIN = "min",
NONE = "none",
- UNSPECIFIED = "unspecified",
+ UNSPECIFIED = "unspecified"
}
export declare enum Priority {
MAX = "max",
HIGH = "high",
DEFAULT = "default",
LOW = "low",
- MIN = "min",
+ MIN = "min"
}
export declare enum RepeatType {
HOUR = "hour",
MINUTE = "minute",
DAY = "day",
WEEK = "week",
- CUSTOM_TIME = "custom_time",
+ CUSTOM_TIME = "custom_time"
}
export declare enum Visibility {
PUBLIC = "public",
SECRET = "secret",
- PRIVATE = "private",
+ PRIVATE = "private"
}
export declare enum RemoteMessageBuilder {
TO = "to",
@@ -297,7 +288,7 @@ export declare enum RemoteMessageBuilder {
COLLAPSE_KEY = "collapseKey",
RECEIPT_MODE = "receiptMode",
SEND_MODE = "sendMode",
- DATA = "data",
+ DATA = "data"
}
declare class CordovaRemoteMessage {
static INSTANCE_ID_SCOPE: string;
@@ -409,4 +400,4 @@ export {};
export declare const HmsPush: HmsPushOriginal;
export declare const HmsLocalNotification: HmsLocalNotificationOriginal;
export declare const HmsPushEvent: HmsPushEventOriginal;
-export declare const HmsPushProfile: HmsPushProfileOriginal;
+export declare const HmsPushProfile: HmsPushProfileOriginal;
\ No newline at end of file
diff --git a/cordova-plugin-hms-push/ionic-native/dist/index.js b/cordova-plugin-hms-push/ionic-native/dist/index.js
index cb82b801..3ca2dc84 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/index.js
+++ b/cordova-plugin-hms-push/ionic-native/dist/index.js
@@ -14,39 +14,26 @@
limitations under the License.
*/
-var __extends =
- (this && this.__extends) ||
- (function () {
- var extendStatics = function (d, b) {
- extendStatics =
- Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array &&
- function (d, b) {
- d.__proto__ = b;
- }) ||
- function (d, b) {
- for (var p in b)
- if (Object.prototype.hasOwnProperty.call(b, p))
- d[p] = b[p];
- };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() {
- this.constructor = d;
- }
- d.prototype =
- b === null
- ? Object.create(b)
- : ((__.prototype = b.prototype), new __());
- };
- })();
-import { IonicNativePlugin, cordova } from "@ionic-native/core";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ if (typeof b !== "function" && b !== null)
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+import { AwesomeCordovaNativePlugin, cordova } from "@awesome-cordova-plugins/core";
var HmsPushOriginal = /** @class */ (function (_super) {
__extends(HmsPushOriginal, _super);
function HmsPushOriginal() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.HmsPushResultCode = HmsPushResultCode;
_this.CordovaRemoteMessage = CordovaRemoteMessage;
_this.RemoteMessageBuilder = RemoteMessageBuilder;
@@ -57,207 +44,107 @@ var HmsPushOriginal = /** @class */ (function (_super) {
* This method initialized HmsPushOriginal.
* @returns Promise
*/
- HmsPushOriginal.prototype.init = function () {
- return cordova(this, "init", { otherPromise: true }, arguments);
- };
- HmsPushOriginal.prototype.enableLogger = function () {
- return cordova(this, "enableLogger", { otherPromise: true }, arguments);
- };
- HmsPushOriginal.prototype.disableLogger = function () {
- return cordova(
- this,
- "disableLogger",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushOriginal.prototype.init = function () { return cordova(this, "init", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
/**
* This method is used to disable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
* @returns Promise
*/
- HmsPushOriginal.prototype.turnOnPush = function () {
- return cordova(this, "turnOnPush", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.turnOnPush = function () { return cordova(this, "turnOnPush", { "otherPromise": true }, arguments); };
/**
* This method is used to enable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
* @returns Promise
*/
- HmsPushOriginal.prototype.turnOffPush = function () {
- return cordova(this, "turnOffPush", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.turnOffPush = function () { return cordova(this, "turnOffPush", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain an AAID in synchronous mode. Before applying for a token, an app calls this method to obtain its unique AAID. The HUAWEI Push server generates a token for the app based on the AAID. If the AAID of the app changes, a new token will be generated next time when the app applies for a token. If an app needs to report statistics events, it must carry the AAID as its unique ID.
* @returns Promise
*/
- HmsPushOriginal.prototype.getId = function () {
- return cordova(this, "getId", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.getId = function () { return cordova(this, "getId", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain an AAID in asynchronous mode.
* @returns Promise
*/
- HmsPushOriginal.prototype.getAAID = function () {
- return cordova(this, "getAAID", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.getAAID = function () { return cordova(this, "getAAID", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain a token required for accessing HUAWEI Push Kit. If there is no local AAID, this method will automatically generate an AAID when it is called because the HUAWEI Push Kit server needs to generate a token based on the AAID.
* @returns Promise
* @params scope ? : String
*/
- HmsPushOriginal.prototype.getToken = function (scope) {
- return cordova(this, "getToken", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.getToken = function (scope) { return cordova(this, "getToken", { "otherPromise": true }, arguments); };
/**
* Obtains a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
* @returns Promise
* @params subjectId ? : String
*/
- HmsPushOriginal.prototype.getTokenWithSubjectId = function (subjectId) {
- return cordova(
- this,
- "getTokenWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushOriginal.prototype.getTokenWithSubjectId = function (subjectId) { return cordova(this, "getTokenWithSubjectId", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain the generation timestamp of an AAID.
* @returns Promise
*/
- HmsPushOriginal.prototype.getCreationTime = function () {
- return cordova(
- this,
- "getCreationTime",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushOriginal.prototype.getCreationTime = function () { return cordova(this, "getCreationTime", { "otherPromise": true }, arguments); };
/**
* This method is used to delete a local AAID and its generation timestamp.
* @returns Promise
*/
- HmsPushOriginal.prototype.deleteAAID = function () {
- return cordova(this, "deleteAAID", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.deleteAAID = function () { return cordova(this, "deleteAAID", { "otherPromise": true }, arguments); };
/**
* This method is used to delete a token. After a token is deleted, the corresponding AAID will not be deleted. This method is a synchronous method.
* @returns Promise
* @params scope ? : String
*/
- HmsPushOriginal.prototype.deleteToken = function (scope) {
- return cordova(this, "deleteToken", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.deleteToken = function (scope) { return cordova(this, "deleteToken", { "otherPromise": true }, arguments); };
/**
* Deletes a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
* @returns Promise
* @params subjectId ? : String
*/
- HmsPushOriginal.prototype.deleteTokenWithSubjectId = function (subjectId) {
- return cordova(
- this,
- "deleteTokenWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushOriginal.prototype.deleteTokenWithSubjectId = function (subjectId) { return cordova(this, "deleteTokenWithSubjectId", { "otherPromise": true }, arguments); };
/**
* This method is used to subscribe to topics in asynchronous mode. The HUAWEI Push Kit topic messaging function allows you to send messages to multiple devices whose users have subscribed to a specific topic. You can write messages about the topic as required, and HUAWEI Push Kit determines the release path and sends messages to the correct devices in a reliable manner.
* @param {string} topic Topic to be subscribed to.
* @returns Promise
*/
- HmsPushOriginal.prototype.subscribe = function (topic) {
- return cordova(this, "subscribe", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.subscribe = function (topic) { return cordova(this, "subscribe", { "otherPromise": true }, arguments); };
/**
* This method is used to unsubscribe from topics that are subscribed to through the subscribe method.
* @param {string} topic Topic to be unsubscribed to.
* @returns Promise
*/
- HmsPushOriginal.prototype.unsubscribe = function (topic) {
- return cordova(this, "unsubscribe", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.unsubscribe = function (topic) { return cordova(this, "unsubscribe", { "otherPromise": true }, arguments); };
/**
* Sets whether to enable automatic initialization. If the enable parameter is set to true, the SDK automatically generates an AAID and applies for a token.
* @returns Promise
* @param {boolean} enabled Indicates whether to enable automatic initialization.
*/
- HmsPushOriginal.prototype.setAutoInitEnabled = function (enabled) {
- return cordova(
- this,
- "setAutoInitEnabled",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushOriginal.prototype.getOdid = function () {
- return cordova(this, "getOdid", { otherPromise: true }, arguments);
- };
+ HmsPushOriginal.prototype.setAutoInitEnabled = function (enabled) { return cordova(this, "setAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.getOdid = function () { return cordova(this, "getOdid", { "otherPromise": true }, arguments); };
/**
* This method is used to check whether automatic initialization is enabled.
* @returns Promise
*/
- HmsPushOriginal.prototype.isAutoInitEnabled = function () {
- return cordova(
- this,
- "isAutoInitEnabled",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushOriginal.prototype.getInitialNotification = function () {
- return cordova(
- this,
- "getInitialNotification",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushOriginal.prototype.sendRemoteMessage = function (remoteMessage) {
- return cordova(
- this,
- "sendRemoteMessage",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushOriginal.prototype.setBackgroundFile = function (filePath) {
- return cordova(
- this,
- "setBackgroundFile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushOriginal.prototype.setItem = function (key, value) {
- return cordova(this, "setItem", { otherPromise: true }, arguments);
- };
- HmsPushOriginal.prototype.getItem = function (key) {
- return cordova(this, "getItem", { otherPromise: true }, arguments);
- };
- HmsPushOriginal.prototype.removeItem = function (key) {
- return cordova(this, "removeItem", { otherPromise: true }, arguments);
- };
- HmsPushOriginal.prototype.removeBackgroundFile = function () {
- return cordova(
- this,
- "removeBackgroundFile",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushOriginal.prototype.isAutoInitEnabled = function () { return cordova(this, "isAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.getInitialNotification = function () { return cordova(this, "getInitialNotification", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.sendRemoteMessage = function (remoteMessage) { return cordova(this, "sendRemoteMessage", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.setBackgroundFile = function (filePath) { return cordova(this, "setBackgroundFile", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.setItem = function (key, value) { return cordova(this, "setItem", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.getItem = function (key) { return cordova(this, "getItem", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.removeItem = function (key) { return cordova(this, "removeItem", { "otherPromise": true }, arguments); };
+ HmsPushOriginal.prototype.removeBackgroundFile = function () { return cordova(this, "removeBackgroundFile", { "otherPromise": true }, arguments); };
HmsPushOriginal.pluginName = "HmsPush";
HmsPushOriginal.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPushOriginal.pluginRef = "HmsPush";
HmsPushOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPushOriginal.platforms = ["Android"];
return HmsPushOriginal;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
var HmsPush = new HmsPushOriginal();
export { HmsPush };
var HmsLocalNotificationOriginal = /** @class */ (function (_super) {
__extends(HmsLocalNotificationOriginal, _super);
function HmsLocalNotificationOriginal() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.Attr = Attr;
_this.Importance = Importance;
_this.Priority = Priority;
@@ -265,260 +152,68 @@ var HmsLocalNotificationOriginal = /** @class */ (function (_super) {
_this.Visibility = Visibility;
return _this;
}
- HmsLocalNotificationOriginal.prototype.localNotification = function (
- localNotification
- ) {
- return cordova(
- this,
- "localNotification",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.localNotificationSchedule =
- function (localNotification) {
- return cordova(
- this,
- "localNotificationSchedule",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelAllNotifications =
- function () {
- return cordova(
- this,
- "cancelAllNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelNotifications = function () {
- return cordova(
- this,
- "cancelNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelScheduledNotifications =
- function () {
- return cordova(
- this,
- "cancelScheduledNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelNotificationsWithId =
- function (id) {
- return cordova(
- this,
- "cancelNotificationsWithId",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelNotificationsWithIdTag =
- function (idTag) {
- return cordova(
- this,
- "cancelNotificationsWithIdTag",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.cancelNotificationsWithTag =
- function (tag) {
- return cordova(
- this,
- "cancelNotificationsWithTag",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.getNotifications = function () {
- return cordova(
- this,
- "getNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.getScheduledNotifications =
- function () {
- return cordova(
- this,
- "getScheduledNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.getChannels = function () {
- return cordova(this, "getChannels", { otherPromise: true }, arguments);
- };
- HmsLocalNotificationOriginal.prototype.channelExists = function (
- channelId
- ) {
- return cordova(
- this,
- "channelExists",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.channelBlocked = function (
- channelId
- ) {
- return cordova(
- this,
- "channelBlocked",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotificationOriginal.prototype.deleteChannel = function (
- channelId
- ) {
- return cordova(
- this,
- "deleteChannel",
- { otherPromise: true },
- arguments
- );
- };
+ HmsLocalNotificationOriginal.prototype.localNotification = function (localNotification) { return cordova(this, "localNotification", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.localNotificationSchedule = function (localNotification) { return cordova(this, "localNotificationSchedule", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelAllNotifications = function () { return cordova(this, "cancelAllNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelNotifications = function () { return cordova(this, "cancelNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelScheduledNotifications = function () { return cordova(this, "cancelScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelNotificationsWithId = function (id) { return cordova(this, "cancelNotificationsWithId", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelNotificationsWithIdTag = function (idTag) { return cordova(this, "cancelNotificationsWithIdTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.cancelNotificationsWithTag = function (tag) { return cordova(this, "cancelNotificationsWithTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.getNotifications = function () { return cordova(this, "getNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.getScheduledNotifications = function () { return cordova(this, "getScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.getChannels = function () { return cordova(this, "getChannels", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.channelExists = function (channelId) { return cordova(this, "channelExists", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.channelBlocked = function (channelId) { return cordova(this, "channelBlocked", { "otherPromise": true }, arguments); };
+ HmsLocalNotificationOriginal.prototype.deleteChannel = function (channelId) { return cordova(this, "deleteChannel", { "otherPromise": true }, arguments); };
HmsLocalNotificationOriginal.pluginName = "HmsLocalNotification";
HmsLocalNotificationOriginal.plugin = "@hmscore/cordova-plugin-hms-push";
HmsLocalNotificationOriginal.pluginRef = "HmsLocalNotification";
- HmsLocalNotificationOriginal.repo =
- "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsLocalNotificationOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsLocalNotificationOriginal.platforms = ["Android"];
return HmsLocalNotificationOriginal;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
var HmsLocalNotification = new HmsLocalNotificationOriginal();
export { HmsLocalNotification };
var HmsPushEventOriginal = /** @class */ (function (_super) {
__extends(HmsPushEventOriginal, _super);
function HmsPushEventOriginal() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.REMOTE_DATA_MESSAGE_RECEIVED = "REMOTE_DATA_MESSAGE_RECEIVED";
_this.TOKEN_RECEIVED_EVENT = "TOKEN_RECEIVED_EVENT";
_this.ON_TOKEN_ERROR_EVENT = "ON_TOKEN_ERROR_EVENT";
_this.NOTIFICATION_OPENED_EVENT = "NOTIFICATION_OPENED_EVENT";
- _this.LOCAL_NOTIFICATION_ACTION_EVENT =
- "LOCAL_NOTIFICATION_ACTION_EVENT";
+ _this.LOCAL_NOTIFICATION_ACTION_EVENT = "LOCAL_NOTIFICATION_ACTION_EVENT";
_this.ON_PUSH_MESSAGE_SENT = "ON_PUSH_MESSAGE_SENT";
_this.ON_PUSH_MESSAGE_SENT_ERROR = "ON_PUSH_MESSAGE_SENT_ERROR";
_this.ON_PUSH_MESSAGE_SENT_DELIVERED = "ON_PUSH_MESSAGE_SENT_DELIVERED";
- _this.ON_MULTI_SENDER_TOKEN_ERROR_EVENT =
- "ON_MULTI_SENDER_TOKEN_ERROR_EVENT";
- _this.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT =
- "ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT";
+ _this.ON_MULTI_SENDER_TOKEN_ERROR_EVENT = "ON_MULTI_SENDER_TOKEN_ERROR_EVENT";
+ _this.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT = "ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT";
return _this;
}
- HmsPushEventOriginal.prototype.onRemoteMessageReceived = function (
- callback
- ) {
- return cordova(
- this,
- "onRemoteMessageReceived",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onTokenReceived = function (callback) {
- return cordova(
- this,
- "onTokenReceived",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onTokenError = function (callback) {
- return cordova(this, "onTokenError", { otherPromise: true }, arguments);
- };
- HmsPushEventOriginal.prototype.onPushMessageSent = function (callback) {
- return cordova(
- this,
- "onPushMessageSent",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onPushMessageSentError = function (
- callback
- ) {
- return cordova(
- this,
- "onPushMessageSentError",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onPushMessageSentDelivered = function (
- callback
- ) {
- return cordova(
- this,
- "onPushMessageSentDelivered",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onLocalNotificationAction = function (
- callback
- ) {
- return cordova(
- this,
- "onLocalNotificationAction",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onNotificationOpenedApp = function (
- callback
- ) {
- return cordova(
- this,
- "onNotificationOpenedApp",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onMultiSenderTokenReceivedEvent = function (
- callback
- ) {
- return cordova(
- this,
- "onMultiSenderTokenReceivedEvent",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEventOriginal.prototype.onMultiSenderTokenErrorEvent = function (
- callback
- ) {
- return cordova(
- this,
- "onMultiSenderTokenErrorEvent",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushEventOriginal.prototype.onRemoteMessageReceived = function (callback) { return cordova(this, "onRemoteMessageReceived", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onTokenReceived = function (callback) { return cordova(this, "onTokenReceived", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onTokenError = function (callback) { return cordova(this, "onTokenError", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onPushMessageSent = function (callback) { return cordova(this, "onPushMessageSent", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onPushMessageSentError = function (callback) { return cordova(this, "onPushMessageSentError", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onPushMessageSentDelivered = function (callback) { return cordova(this, "onPushMessageSentDelivered", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onLocalNotificationAction = function (callback) { return cordova(this, "onLocalNotificationAction", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onNotificationOpenedApp = function (callback) { return cordova(this, "onNotificationOpenedApp", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onMultiSenderTokenReceivedEvent = function (callback) { return cordova(this, "onMultiSenderTokenReceivedEvent", { "otherPromise": true }, arguments); };
+ HmsPushEventOriginal.prototype.onMultiSenderTokenErrorEvent = function (callback) { return cordova(this, "onMultiSenderTokenErrorEvent", { "otherPromise": true }, arguments); };
HmsPushEventOriginal.pluginName = "HmsPushEvent";
HmsPushEventOriginal.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPushEventOriginal.pluginRef = "HmsPushEvent";
- HmsPushEventOriginal.repo =
- "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsPushEventOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPushEventOriginal.platforms = ["Android"];
return HmsPushEventOriginal;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
var HmsPushEvent = new HmsPushEventOriginal();
export { HmsPushEvent };
var HmsPushProfileOriginal = /** @class */ (function (_super) {
__extends(HmsPushProfileOriginal, _super);
function HmsPushProfileOriginal() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.HUAWEI_PROFILE = 1;
_this.CUSTOM_PROFILE = 2;
_this.UNDEFINED_PROFILE = -1;
@@ -527,56 +222,18 @@ var HmsPushProfileOriginal = /** @class */ (function (_super) {
/**
*
*/
- HmsPushProfileOriginal.prototype.isSupportProfile = function () {
- return cordova(
- this,
- "isSupportProfile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfileOriginal.prototype.addProfile = function (type, profileId) {
- return cordova(this, "addProfile", { otherPromise: true }, arguments);
- };
- HmsPushProfileOriginal.prototype.addProfileWithSubjectId = function (
- subjectId,
- type,
- profileId
- ) {
- return cordova(
- this,
- "addProfileWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfileOriginal.prototype.deleteProfile = function (profileId) {
- return cordova(
- this,
- "deleteProfile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfileOriginal.prototype.deleteProfileWithSubjectId = function (
- subjectId,
- profileId
- ) {
- return cordova(
- this,
- "deleteProfileWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushProfileOriginal.prototype.isSupportProfile = function () { return cordova(this, "isSupportProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfileOriginal.prototype.addProfile = function (type, profileId) { return cordova(this, "addProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfileOriginal.prototype.addProfileWithSubjectId = function (subjectId, type, profileId) { return cordova(this, "addProfileWithSubjectId", { "otherPromise": true }, arguments); };
+ HmsPushProfileOriginal.prototype.deleteProfile = function (profileId) { return cordova(this, "deleteProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfileOriginal.prototype.deleteProfileWithSubjectId = function (subjectId, profileId) { return cordova(this, "deleteProfileWithSubjectId", { "otherPromise": true }, arguments); };
HmsPushProfileOriginal.pluginName = "HmsPushProfile";
HmsPushProfileOriginal.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPushProfileOriginal.pluginRef = "HmsPushProfile";
- HmsPushProfileOriginal.repo =
- "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsPushProfileOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPushProfileOriginal.platforms = ["Android"];
return HmsPushProfileOriginal;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
var HmsPushProfile = new HmsPushProfileOriginal();
export { HmsPushProfile };
export var HmsPushResultCode;
@@ -626,8 +283,7 @@ export var HmsPushResultCode;
// The operation cannot be performed in the main thread.
HmsPushResultCode["ERROR_MAIN_THREAD"] = "907122050";
// The device certificate authentication fails.
- HmsPushResultCode["ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING"] =
- "907122051";
+ HmsPushResultCode["ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING"] = "907122051";
// Failed to bind the service.
HmsPushResultCode["ERROR_BIND_SERVICE_SELF_MAPPING"] = "907122052";
// The SDK is being automatically initialized. Try again later.
@@ -765,9 +421,7 @@ export var RemoteMessageBuilder;
})(RemoteMessageBuilder || (RemoteMessageBuilder = {}));
var CordovaRemoteMessage = /** @class */ (function () {
function CordovaRemoteMessage(options) {
- if (options === void 0) {
- options = {};
- }
+ if (options === void 0) { options = {}; }
this.remoteMsg = options;
}
/*
@@ -868,33 +522,25 @@ var CordovaRemoteMessage = /** @class */ (function () {
* Notification:getTitleLocalizationKey() Obtains the key of the displayed title of a notification message
*/
CordovaRemoteMessage.prototype.getTitleLocalizationKey = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY];
};
/*
* Notification:getTitleLocalizationArgs() Obtains variable parameters of the displayed title of a message
*/
CordovaRemoteMessage.prototype.getTitleLocalizationArgs = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS];
};
/*
* Notification:getBodyLocalizationKey() Obtains the key of the displayed content of a message
*/
CordovaRemoteMessage.prototype.getBodyLocalizationKey = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY];
};
/*
* Notification:getBodyLocalizationArgs() Obtains variable parameters of the displayed content of a message
*/
CordovaRemoteMessage.prototype.getBodyLocalizationArgs = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS];
};
/*
* Notification:getBody() Obtains the body of a message
@@ -1032,9 +678,7 @@ var CordovaRemoteMessage = /** @class */ (function () {
* Notification:isDefaultVibrate()
*/
CordovaRemoteMessage.prototype.isDefaultVibrate = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE];
};
CordovaRemoteMessage.INSTANCE_ID_SCOPE = "HCM";
CordovaRemoteMessage.PRIORITY_UNKNOWN = 0;
@@ -1085,6 +729,6 @@ var CordovaRemoteMessage = /** @class */ (function () {
ISDEFAULTVIBRATE: "isDefaultVibrate",
};
return CordovaRemoteMessage;
-})();
+}());
export { CordovaRemoteMessage };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL25hdGl2ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBaUJBLE9BQU8sOEJBQXNDLE1BQU0sb0JBQW9CLENBQUM7O0lBVTNDLDJCQUFpQjs7O1FBQzFDLHVCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQ3RDLDBCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLDBCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLHlCQUFtQixHQUFHLEtBQUssQ0FBQTs7O0lBRTNCOzs7T0FHRztJQUNILHNCQUFJO0lBS0osOEJBQVk7SUFLWiwrQkFBYTtJQUtiOzs7T0FHRztJQUNILDRCQUFVO0lBS1Y7OztPQUdHO0lBQ0gsNkJBQVc7SUFLWDs7O09BR0c7SUFDSCx1QkFBSztJQUtMOzs7T0FHRztJQUNILHlCQUFPO0lBS1A7Ozs7T0FJRztJQUNILDBCQUFRLGFBQUMsS0FBYztJQUt2Qjs7OztPQUlHO0lBQ0gsdUNBQXFCLGFBQUMsU0FBaUI7SUFLdkM7OztPQUdHO0lBQ0gsaUNBQWU7SUFLZjs7O09BR0c7SUFDSCw0QkFBVTtJQUtWOzs7O09BSUc7SUFDSCw2QkFBVyxhQUFDLEtBQWM7SUFLMUI7Ozs7T0FJRztJQUNILDBDQUF3QixhQUFDLFNBQWlCO0lBSzFDOzs7O09BSUc7SUFDSCwyQkFBUyxhQUFDLEtBQWE7SUFLdkI7Ozs7T0FJRztJQUNILDZCQUFXLGFBQUMsS0FBYTtJQUt6Qjs7OztPQUlHO0lBQ0gsb0NBQWtCLGFBQUMsT0FBZ0I7SUFLbkMseUJBQU87SUFLUDs7O09BR0c7SUFDSCxtQ0FBaUI7SUFLakIsd0NBQXNCO0lBS3RCLG1DQUFpQixhQUFDLGFBQWtDO0lBS3BELG1DQUFpQixhQUFDLFFBQWU7SUFLakMseUJBQU8sYUFBQyxHQUFVLEVBQUMsS0FBWTtJQUsvQix5QkFBTyxhQUFD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QUUsYUFBYTtRQUMxQixVQUFVLEVBQUUsWUFBWTtRQUN4QixNQUFNLEVBQUUsUUFBUTtRQUNoQixhQUFhLEVBQUUsZUFBZTtRQUM5QixVQUFVLEVBQUUsWUFBWTtRQUN4QixTQUFTLEVBQUUsV0FBVztRQUN0QixZQUFZLEVBQUUsY0FBYztRQUM1QixXQUFXLEVBQUUsYUFBYTtRQUMxQixjQUFjLEVBQUUsZ0JBQWdCO1FBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7UUFDaEMsZ0JBQWdCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7K0JBN3JCTjs7U0Ewb0JNLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IDIwMjAtMjAyMS4gSHVhd2VpIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIilcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFBsdWdpbiwgQ29yZG92YSwgSW9uaWNOYXRpdmVQbHVnaW4gfSBmcm9tIFwiQGlvbmljLW5hdGl2ZS9jb3JlXCI7XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaFwiLFxuICAgIHBsdWdpbjogXCJAaG1zY29yZS9jb3Jkb3ZhLXBsdWdpbi1obXMtcHVzaFwiLFxuICAgIHBsdWdpblJlZjogXCJIbXNQdXNoXCIsXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIbXNQdXNoIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAgIEhtc1B1c2hSZXN1bHRDb2RlID0gSG1zUHVzaFJlc3VsdENvZGU7XG4gICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UgPSBDb3Jkb3ZhUmVtb3RlTWVzc2FnZTtcbiAgICBSZW1vdGVNZXNzYWdlQnVpbGRlciA9IFJlbW90ZU1lc3NhZ2VCdWlsZGVyO1xuICAgIERFRkFVTFRfVE9LRU5fU0NPUEUgPSBcIkhDTVwiXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCAgaW5pdGlhbGl6ZWQgSG1zUHVzaC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gICAgICovXG4gICAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZW5hYmxlTG9nZ2VyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBkaXNhYmxlTG9nZ2VyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGRpc3BsYXkgb2Ygbm90aWZpY2F0aW9uIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBpbiBhbiBhcHAsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZC4gVGhpcyBtZXRob2QgYXBwbGllcyB0byBub3RpZmljYXRpb24gbWVzc2FnZXMgYnV0IG5vdCBkYXRhIG1lc3NhZ2VzLiBJdCBpcyB0aGUgYXBwIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIGRhdGEgbWVzc2FnaW5nLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIHR1cm5PblB1c2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgZGlzcGxheSBvZiBub3RpZmljYXRpb24gbWVzc2FnZXMgaW4gYW4gYXBwLCB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QuIFRoaXMgbWV0aG9kIGFwcGxpZXMgdG8gbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGJ1dCBub3QgZGF0YSBtZXNzYWdlcy4gSXQgaXMgdGhlIGFwcCB0aGF0IGRldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSBkYXRhIG1lc3NhZ2luZy5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICB0dXJuT2ZmUHVzaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYW4gQUFJRCBpbiBzeW5jaHJvbm91cyBtb2RlLiBCZWZvcmUgYXBwbHlpbmcgZm9yIGEgdG9rZW4sIGFuIGFwcCBjYWxscyB0aGlzIG1ldGhvZCB0byBvYnRhaW4gaXRzIHVuaXF1ZSBBQUlELiBUaGUgSFVBV0VJIFB1c2ggc2VydmVyIGdlbmVyYXRlcyBhIHRva2VuIGZvciB0aGUgYXBwIGJhc2VkIG9uIHRoZSBBQUlELiBJZiB0aGUgQUFJRCBvZiB0aGUgYXBwIGNoYW5nZXMsIGEgbmV3IHRva2VuIHdpbGwgYmUgZ2VuZXJhdGVkIG5leHQgdGltZSB3aGVuIHRoZSBhcHAgYXBwbGllcyBmb3IgYSB0b2tlbi4gSWYgYW4gYXBwIG5lZWRzIHRvIHJlcG9ydCBzdGF0aXN0aWNzIGV2ZW50cywgaXQgbXVzdCBjYXJyeSB0aGUgQUFJRCBhcyBpdHMgdW5pcXVlIElELlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIGdldElkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb2J0YWluIGFuIEFBSUQgaW4gYXN5bmNocm9ub3VzIG1vZGUuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICovXG4gICAgZ2V0QUFJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiBhIHRva2VuIHJlcXVpcmVkIGZvciBhY2Nlc3NpbmcgSFVBV0VJIFB1c2ggS2l0LiBJZiB0aGVyZSBpcyBubyBsb2NhbCBBQUlELCB0aGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYW4gQUFJRCB3aGVuIGl0IGlzIGNhbGxlZCBiZWNhdXNlIHRoZSBIVUFXRUkgUHVzaCBLaXQgc2VydmVyIG5lZWRzIHRvIGdlbmVyYXRlIGEgdG9rZW4gYmFzZWQgb24gdGhlIEFBSUQuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICogQHBhcmFtcyBzY29wZSA/IDogU3RyaW5nXG4gICAgICovXG4gICAgZ2V0VG9rZW4oc2NvcGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIGEgdG9rZW4gdGhhdCBhIHRhcmdldCBhcHAgZGV2ZWxvcGVyIGFwcGxpZXMgZm9yIGEgc2VuZGVyIHRvIGludGVncmF0ZSBQdXNoIEtpdCBpbiB0aGUgbXVsdGktc2VuZGVyIHNjZW5hcmlvLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqIEBwYXJhbXMgc3ViamVjdElkID8gOiBTdHJpbmdcbiAgICAgKi9cbiAgICBnZXRUb2tlbldpdGhTdWJqZWN0SWQoc3ViamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiB0aGUgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgb2YgYW4gQUFJRC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICBnZXRDcmVhdGlvblRpbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSBsb2NhbCBBQUlEIGFuZCBpdHMgZ2VuZXJhdGlvbiB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICovXG4gICAgZGVsZXRlQUFJRCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSB0b2tlbi4gQWZ0ZXIgYSB0b2tlbiBpcyBkZWxldGVkLCB0aGUgY29ycmVzcG9uZGluZyBBQUlEIHdpbGwgbm90IGJlIGRlbGV0ZWQuIFRoaXMgbWV0aG9kIGlzIGEgc3luY2hyb25vdXMgbWV0aG9kLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqIEBwYXJhbXMgc2NvcGUgPyA6IFN0cmluZ1xuICAgICAqL1xuICAgIGRlbGV0ZVRva2VuKHNjb3BlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSB0b2tlbiB0aGF0IGEgdGFyZ2V0IGFwcCBkZXZlbG9wZXIgYXBwbGllcyBmb3IgYSBzZW5kZXIgdG8gaW50ZWdyYXRlIFB1c2ggS2l0IGluIHRoZSBtdWx0aS1zZW5kZXIgc2NlbmFyaW8uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICogQHBhcmFtcyBzdWJqZWN0SWQgPyA6IFN0cmluZ1xuICAgICAqL1xuICAgIGRlbGV0ZVRva2VuV2l0aFN1YmplY3RJZChzdWJqZWN0SWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc3Vic2NyaWJlIHRvIHRvcGljcyBpbiBhc3luY2hyb25vdXMgbW9kZS4gVGhlIEhVQVdFSSBQdXNoIEtpdCB0b3BpYyBtZXNzYWdpbmcgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZW5kIG1lc3NhZ2VzIHRvIG11bHRpcGxlIGRldmljZXMgd2hvc2UgdXNlcnMgaGF2ZSBzdWJzY3JpYmVkIHRvIGEgc3BlY2lmaWMgdG9waWMuIFlvdSBjYW4gd3JpdGUgbWVzc2FnZXMgYWJvdXQgdGhlIHRvcGljIGFzIHJlcXVpcmVkLCBhbmQgSFVBV0VJIFB1c2ggS2l0IGRldGVybWluZXMgdGhlIHJlbGVhc2UgcGF0aCBhbmQgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNvcnJlY3QgZGV2aWNlcyBpbiBhIHJlbGlhYmxlIG1hbm5lci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgc3Vic2NyaWJlZCB0by5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICBzdWJzY3JpYmUodG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gdG9waWNzIHRoYXQgYXJlIHN1YnNjcmliZWQgdG8gdGhyb3VnaCB0aGUgc3Vic2NyaWJlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgdW5zdWJzY3JpYmVkIHRvLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIHVuc3Vic2NyaWJlKHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRvIGVuYWJsZSBhdXRvbWF0aWMgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBlbmFibGUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlLCB0aGUgU0RLIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGFuIEFBSUQgYW5kIGFwcGxpZXMgZm9yIGEgdG9rZW4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgYXV0b21hdGljIGluaXRpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHNldEF1dG9Jbml0RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGdldE9kaWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbiBpcyBlbmFibGVkLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIGlzQXV0b0luaXRFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRJbml0aWFsTm90aWZpY2F0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNlbmRSZW1vdGVNZXNzYWdlKHJlbW90ZU1lc3NhZ2U6IFJlbW90ZU1lc3NhZ2VPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc2V0QmFja2dyb3VuZEZpbGUoZmlsZVBhdGg6c3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNldEl0ZW0oa2V5OnN0cmluZyx2YWx1ZTpzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0SXRlbShrZXk6c3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgcmVtb3ZlSXRlbShrZXk6c3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHJlbW92ZUJhY2tncm91bmRGaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG59XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zTG9jYWxOb3RpZmljYXRpb25cIixcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcbiAgICBwbHVnaW5SZWY6IFwiSG1zTG9jYWxOb3RpZmljYXRpb25cIixcbiAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhtc0xvY2FsTm90aWZpY2F0aW9uIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAgIEF0dHIgPSBBdHRyO1xuICAgIEltcG9ydGFuY2UgPSBJbXBvcnRhbmNlO1xuICAgIFByaW9yaXR5ID0gUHJpb3JpdHk7XG4gICAgUmVwZWF0VHlwZSA9IFJlcGVhdFR5cGU7XG4gICAgVmlzaWJpbGl0eSA9IFZpc2liaWxpdHk7XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGxvY2FsTm90aWZpY2F0aW9uKGxvY2FsTm90aWZpY2F0aW9uOiBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGxvY2FsTm90aWZpY2F0aW9uU2NoZWR1bGUobG9jYWxOb3RpZmljYXRpb246IExvY2FsTm90aWZpY2F0aW9uT2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsQWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsU2NoZWR1bGVkTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhJZChpZDogbnVtYmVyW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhJZFRhZyhpZFRhZzogSWRUYWdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zV2l0aFRhZyh0YWc6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXROb3RpZmljYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGdldFNjaGVkdWxlZE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0Q2hhbm5lbHMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2hhbm5lbEV4aXN0cyhjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBjaGFubmVsQmxvY2tlZChjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBkZWxldGVDaGFubmVsKGNoYW5uZWxJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaEV2ZW50XCIsXG4gICAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXG4gICAgcGx1Z2luUmVmOiBcIkhtc1B1c2hFdmVudFwiLFxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSG1zUHVzaEV2ZW50IGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uUmVtb3RlTWVzc2FnZVJlY2VpdmVkIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uVG9rZW5SZWNlaXZlZCAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvblRva2VuRXJyb3IgKGNhbGxiYWNrOihkYXRhOmFueSk9PnZvaWQpOnZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgb25QdXNoTWVzc2FnZVNlbnQgKGNhbGxiYWNrOihkYXRhOmFueSk9PnZvaWQpOnZvaWQge1xuICAgIHJldHVybjtcbiAgIH1cbiAgXG4gICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgb25QdXNoTWVzc2FnZVNlbnRFcnJvciAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvblB1c2hNZXNzYWdlU2VudERlbGl2ZXJlZCAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvbkxvY2FsTm90aWZpY2F0aW9uQWN0aW9uIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTm90aWZpY2F0aW9uT3BlbmVkQXBwIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTXVsdGlTZW5kZXJUb2tlblJlY2VpdmVkRXZlbnQoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTXVsdGlTZW5kZXJUb2tlbkVycm9yRXZlbnQoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIFJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRUQgPSBcIlJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRURcIlxuICBUT0tFTl9SRUNFSVZFRF9FVkVOVCA9IFwiVE9LRU5fUkVDRUlWRURfRVZFTlRcIlxuICBPTl9UT0tFTl9FUlJPUl9FVkVOVCA9IFwiT05fVE9LRU5fRVJST1JfRVZFTlRcIlxuICBOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UID0gXCJOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UXCJcbiAgTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVCA9IFwiTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVFwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVFwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0VSUk9SID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVF9FUlJPUlwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0RFTElWRVJFRCA9IFwiT05fUFVTSF9NRVNTQUdFX1NFTlRfREVMSVZFUkVEXCJcbiAgT05fTVVMVElfU0VOREVSX1RPS0VOX0VSUk9SX0VWRU5UID0gXCJPTl9NVUxUSV9TRU5ERVJfVE9LRU5fRVJST1JfRVZFTlRcIlxuICBPTl9NVUxUSV9TRU5ERVJfVE9LRU5fUkVDRUlWRURfRVZFTlQgPSBcIk9OX01VTFRJX1NFTkRFUl9UT0tFTl9SRUNFSVZFRF9FVkVOVFwiXG4gIH1cblxuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6IFwiSG1zUHVzaFByb2ZpbGVcIixcbiAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXG4gIHBsdWdpblJlZjogXCJIbXNQdXNoUHJvZmlsZVwiLFxuICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcbiAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIbXNQdXNoUHJvZmlsZSBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgXG4gIEhVQVdFSV9QUk9GSUxFPTE7XG4gIENVU1RPTV9QUk9GSUxFPTI7XG4gIFVOREVGSU5FRF9QUk9GSUxFPS0xO1xuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIC8qKlxuICAgKiBcbiAgICovXG4gIGlzU3VwcG9ydFByb2ZpbGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICByZXR1cm47XG4gIH1cblxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBhZGRQcm9maWxlKHR5cGU6bnVtYmVyLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIGFkZFByb2ZpbGVXaXRoU3ViamVjdElkKHN1YmplY3RJZDpzdHJpbmcsIHR5cGU6bnVtYmVyLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIGRlbGV0ZVByb2ZpbGUocHJvZmlsZUlkOnN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICByZXR1cm47XG4gIH1cblxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBkZWxldGVQcm9maWxlV2l0aFN1YmplY3RJZChzdWJqZWN0SWQ6c3RyaW5nLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBIbXNQdXNoUmVzdWx0Q29kZSB7XG4gICAgLy8gU3VjY2Vzc1xuICAgIFNVQ0NFU1MgPSBcIjBcIixcblxuICAgIC8vIEVycm9yXG4gICAgRVJST1IgPSBcIi0xXCIsXG5cbiAgICAvLyBCdW5kbGUgaXMgbnVsbCwgZXhjZXB0aW9uXG4gICAgTlVMTF9CVU5ETEUgPSBcIjMzM1wiLFxuXG4gICAgLy8gWW91IGRvIG5vdCBoYXZlIGEgdG9rZW4uIEFwcGx5IGZvciBhIHRva2VuLlxuICAgIEVSUk9SX05PX1RPS0VOID0gXCI5MDcxMjIwMzBcIixcblxuICAgIC8vIFRoZSBjdXJyZW50IG5ldHdvcmsgaXMgdW5hdmFpbGFibGUuIENoZWNrIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uXG4gICAgRVJST1JfTk9fTkVUV09SSyA9IFwiOTA3MTIyMDMxXCIsXG5cbiAgICAvLyBUaGUgdG9rZW4gaGFzIGV4cGlyZWQuIERlbGV0ZSB0aGUgdG9rZW4gYW5kIGFwcGx5IGZvciBhIG5ldyBvbmUuXG4gICAgRVJST1JfVE9LRU5fSU5WQUxJRCA9IFwiOTA3MTIyMDMyXCIsXG5cbiAgICAvLyBJZiB0aGUgUHVzaCBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlLCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cbiAgICBFUlJPUl9TRVJWSUNFX05PVF9BVkFJTEFCTEUgPSBcIjkwNzEyMjA0NlwiLFxuXG4gICAgLy8gSWYgdGhlIFB1c2ggc2VydmVyIHJldHVybnMgYW4gZXJyb3IsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1BVU0hfU0VSVkVSID0gXCI5MDcxMjIwNDdcIixcblxuICAgIC8vIFVua25vd24gZXJyb3IuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1VOS05PV04gPSBcIjkwNzEyMjA0NVwiLFxuXG4gICAgLy8gVGhlIG51bWJlciBvZiBzdWJzY3JpYmVkIHRvcGljcyBleGNlZWRzIDIwMDAuXG4gICAgRVJST1JfVE9QSUNfRVhDRUVEID0gXCI5MDcxMjIwMzRcIixcblxuICAgIC8vIEZhaWxlZCB0byBzZW5kIHRoZSBzdWJzY3JpcHRpb24gdG9waWMuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1RPUElDX1NFTkQgPSBcIjkwNzEyMjAzNVwiLFxuXG4gICAgLy8gUHVzaCByaWdodHMgYXJlIG5vdCBlbmFibGVkLiBFbmFibGUgdGhlIHNlcnZpY2UgYW5kIHNldCBwdXNoIHNlcnZpY2UgcGFyYW1ldGVycyBhdCBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgRVJST1JfTk9fUklHSFQgPSBcIjkwNzEyMjAzNlwiLFxuXG4gICAgLy8gRmFpbGVkIHRvIGFwcGx5IGZvciB0aGUgdG9rZW4uIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX0dFVF9UT0tFTl9FUlIgPSBcIjkwNzEyMjAzN1wiLFxuXG4gICAgLy8gTm8gc3RvcmFnZSBsb2NhdGlvbiBpcyBzZWxlY3RlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSBzdG9yYWdlIGxvY2F0aW9uIGlzIGludmFsaWQuXG4gICAgRVJST1JfU1RPUkFHRV9MT0NBVElPTl9FTVBUWSA9IFwiOTA3MTIyMDM4XCIsXG5cbiAgICAvLyBGYWlsZWQgdG8gYXBwbHkgZm9yIGEgdG9rZW4uIENyb3NzLXJlZ2lvbiB0b2tlbiBhcHBsaWNhdGlvbiBpcyBub3QgYWxsb3dlZC5cbiAgICBFUlJPUl9OT1RfQUxMT1dfQ1JPU1NfQVBQTFkgPSBcIjkwNzEyMjA1M1wiLFxuXG4gICAgLy8gVGhlIG1lc3NhZ2UgYm9keSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0uXG4gICAgRVJST1JfU0laRSA9IFwiOTA3MTIyMDQxXCIsXG5cbiAgICAvLyBUaGUgbWVzc2FnZSBjb250YWlucyBpbnZhbGlkIHBhcmFtZXRlcnMuXG4gICAgRVJST1JfSU5WQUxJRF9QQVJBTUVURVJTID0gXCI5MDcxMjIwNDJcIixcblxuICAgIC8vIFRoZSBudW1iZXIgb2Ygc2VudCBtZXNzYWdlcyByZWFjaGVzIHRoZSB1cHBlciBsaW1pdC4gVGhlIG1lc3NhZ2VzIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgIEVSUk9SX1RPT19NQU5ZX01FU1NBR0VTID0gXCI5MDcxMjIwNDNcIixcblxuICAgIC8vIFRoZSBtZXNzYWdlIGxpZmV0aW1lIGV4cGlyZXMgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSBBUFAgc2VydmVyLlxuICAgIEVSUk9SX1RUTF9FWENFRURFRCA9IFwiOTA3MTIyMDQ0XCIsXG5cbiAgICAvLyAgSHVhd2VpIE1vYmlsZSBTZXJ2aWNlcyAoQVBLKSBjYW4ndCBjb25uZWN0ICBIdWF3ZWkgUHVzaCAgS2l0LlxuICAgIEVSUk9SX0hNU19DTElFTlRfQVBJID0gXCI5MDcxMjIwNDhcIixcblxuICAgIC8vIFRoZSBjdXJyZW50IEVNVUkgdmVyc2lvbiBpcyB0b28gZWFybHkgdG8gdXNlIHRoZSBjYXBhYmlsaXR5LlxuICAgIEVSUk9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEID0gXCI5MDcxMjIwNDlcIixcblxuICAgIC8vIFRoZSBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBpbiB0aGUgbWFpbiB0aHJlYWQuXG4gICAgRVJST1JfTUFJTl9USFJFQUQgPSBcIjkwNzEyMjA1MFwiLFxuXG4gICAgLy8gVGhlIGRldmljZSBjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICBFUlJPUl9ITVNfREVWSUNFX0FVVEhfRkFJTEVEX1NFTEZfTUFQUElORyA9IFwiOTA3MTIyMDUxXCIsXG5cbiAgICAvLyBGYWlsZWQgdG8gYmluZCB0aGUgc2VydmljZS5cbiAgICBFUlJPUl9CSU5EX1NFUlZJQ0VfU0VMRl9NQVBQSU5HID0gXCI5MDcxMjIwNTJcIixcblxuICAgIC8vIFRoZSBTREsgaXMgYmVpbmcgYXV0b21hdGljYWxseSBpbml0aWFsaXplZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgIEVSUk9SX0FVVE9fSU5JVElBTElaSU5HID0gXCI5MDcxMjIwNTRcIixcblxuICAgIC8qVGhlIGlucHV0IHBhcmFtZXRlciBpcyBpbmNvcnJlY3QuIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICAgICAqIEV4YW1wbGU6IGFwcF9pZCBpbiB0aGUgYWdjb25uZWN0IC0gc2VydmljZXMuanNvbiBmaWxlO1xuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1aWxkLmdyYWRsZSBmaWxlIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2VydGlmaWNhdGUgc2lnbmF0dXJlLlxuICAgICAqL1xuICAgIEVSUk9SX0FSR1VNRU5UU19JTlZBTElEID0gXCI5MDcxMzUwMDBcIixcblxuICAgIC8vIEludGVybmFsIFB1c2ggZXJyb3IuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0IGVuZ2luZWVycy5cbiAgICBFUlJPUl9JTlRFUk5BTF9FUlJPUiA9IFwiOTA3MTM1MDAxXCIsXG5cbiAgICAvLyBUaGUgc2VydmljZSBkb2VzIG5vdCBleGlzdC4gVGhlIGludm9rZWQgaW50ZXJmYWNlIGRvZXMgbm90IGV4aXN0LlxuICAgIEVSUk9SX05BTUlOR19JTlZBTElEID0gXCI5MDcxMzUwMDJcIixcblxuICAgIC8vIFRoZSBBcGlDbGllbnQgb2JqZWN0IGlzIGludmFsaWQuXG4gICAgRVJST1JfQ0xJRU5UX0FQSV9JTlZBTElEID0gXCI5MDcxMzUwMDNcIixcblxuICAgIC8vIEludm9raW5nIEFJREwgdGltZXMgb3V0LiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cbiAgICBFUlJPUl9FWEVDVVRFX1RJTUVPVVQgPSBcIjkwNzEzNTAwNFwiLFxuXG4gICAgLy8gVGhlIGN1cnJlbnQgYXJlYSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgc2VydmljZS5cbiAgICBFUlJPUl9OT1RfSU5fU0VSVklDRSA9IFwiOTA3MTM1MDA1XCIsXG5cbiAgICAvLyBJZiB0aGUgQUlETCBjb25uZWN0aW9uIHNlc3Npb24gaXMgaW52YWxpZCwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXG4gICAgRVJST1JfU0VTU0lPTl9JTlZBTElEID0gXCI5MDcxMzUwMDZcIixcblxuICAgIC8vIEFuIGVycm9yIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgYW4gdW5zcGVjaWZpZWQgQVBJLlxuICAgIEVSUk9SX0FQSV9OT1RfU1BFQ0lGSUVEID0gXCIxMDAyXCIsXG5cbiAgICAvKiBGYWlsZWQgdG8gaW52b2tlIHRoZSBnYXRld2F5IHRvIHF1ZXJ5IHRoZSBhcHBsaWNhdGlvbiBzY29wZS5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGFwcCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBlbmFibGVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgICAqL1xuICAgIEVSUk9SX0dFVF9TQ09QRV9FUlJPUiA9IFwiOTA3MTM1NzAwXCIsXG4gICAgLyogU2NvcGUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGFwcCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBlbmFibGVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgICAqL1xuICAgIEVSUk9SX1NDT1BFX0xJU1RfRU1QVFkgPSBcIjkwNzEzNTcwMVwiLFxuXG4gICAgLyogVGhlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IGlzIG5vdCBjb25maWd1cmVkIG9uIHRoZSBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgICogMS4gQ2hlY2sgd2hldGhlciB5b3VyIHBob25lIGNhbiBhY2Nlc3MgdGhlIEludGVybmV0LlxuICAgICAqIDIuIENoZWNrIHdoZXRoZXIgdGhlIGNvcnJlY3QgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgaXMgY29uZmlndXJlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuIEZvciBkZXRhaWxzLCBzZWUgQXBwR2FsbGVyeSBDb25uZWN0IGNvbmZpZ3VyYXRpb24gaW4gRGV2ZWxvcG1lbnQgUHJlcGFyYXRpb25zLlxuICAgICAqIDMuIElmIHRoZSBjaGVjayByZXN1bHQgaXMgY29ycmVjdCwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXG4gICAgICovXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FTVBUWSA9IFwiOTA3MTM1NzAyXCIsXG5cbiAgICAvLyBQZXJtaXNzaW9uIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoZSBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgRVJST1JfUEVSTUlTU0lPTl9MSVNUX0VNUFRZID0gXCI5MDcxMzU3MDNcIixcblxuICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgZXhpc3QuXG4gICAgRVJST1JfQVVUSF9JTkZPX05PVF9FWElTVCA9IFwiNjAwMlwiLFxuXG4gICAgLy8gQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbi4gQ2hlY2sgd2hldGhlciB0aGUgY29ycmVjdCBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCBpcyBjb25maWd1cmVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC4gRm9yIGRldGFpbHMsIHNlZSBBcHBHYWxsZXJ5IENvbm5lY3QgY29uZmlndXJhdGlvbiBpbiBEZXZlbG9wbWVudCBQcmVwYXJhdGlvbnMuXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FUlJPUiA9IFwiNjAwM1wiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiBUaGUgcGVybWlzc2lvbiBkb2VzIG5vdCBleGlzdCBhbmQgaXMgbm90IGFwcGxpZWQgZm9yIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICBFUlJPUl9QRVJNSVNTSU9OX05PVF9FWElTVCA9IFwiNjAwNFwiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiB1bmF1dGhvcml6ZWQuXG4gICAgRVJST1JfUEVSTUlTU0lPTl9OT1RfQVVUSE9SSVpFRCA9IFwiNjAwNVwiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiBUaGUgYXV0aG9yaXphdGlvbiBleHBpcmVzLlxuICAgIEVSUk9SX1BFUk1JU1NJT05fRVhQSVJFRCA9IFwiNjAwNlwiLFxufVxuXG5leHBvcnQgZW51bSBBdHRyIHtcbiAgICBpZCA9IFwiaWRcIixcbiAgICBtZXNzYWdlID0gXCJtZXNzYWdlXCIsXG4gICAgZmlyZURhdGUgPSBcImZpcmVEYXRlXCIsXG4gICAgdGl0bGUgPSBcInRpdGxlXCIsXG4gICAgdGlja2VyID0gXCJ0aWNrZXJcIixcbiAgICBzaG93V2hlbiA9IFwic2hvd1doZW5cIixcbiAgICBhdXRvQ2FuY2VsID0gXCJhdXRvQ2FuY2VsXCIsXG4gICAgbGFyZ2VJY29uID0gXCJsYXJnZUljb25cIixcbiAgICBsYXJnZUljb25VcmwgPSBcImxhcmdlSWNvblVybFwiLFxuICAgIHNtYWxsSWNvbiA9IFwic21hbGxJY29uXCIsXG4gICAgYmlnVGV4dCA9IFwiYmlnVGV4dFwiLFxuICAgIHN1YlRleHQgPSBcInN1YlRleHRcIixcbiAgICBiaWdQaWN0dXJlVXJsID0gXCJiaWdQaWN0dXJlVXJsXCIsXG4gICAgc2hvcnRjdXRJZCA9IFwic2hvcnRjdXRJZFwiLFxuICAgIG51bWJlciA9IFwibnVtYmVyXCIsXG4gICAgY2hhbm5lbElkID0gXCJjaGFubmVsSWRcIixcbiAgICBjaGFubmVsTmFtZSA9IFwiY2hhbm5lbE5hbWVcIixcbiAgICBjaGFubmVsRGVzY3JpcHRpb24gPSBcImNoYW5uZWxEZXNjcmlwdGlvblwiLFxuICAgIGNvbG9yID0gXCJjb2xvclwiLFxuICAgIGdyb3VwID0gXCJncm91cFwiLFxuICAgIGdyb3VwU3VtbWFyeSA9IFwiZ3JvdXBTdW1tYXJ5XCIsXG4gICAgcGxheVNvdW5kID0gXCJwbGF5U291bmRcIixcbiAgICBzb3VuZE5hbWUgPSBcInNvdW5kTmFtZVwiLFxuICAgIHZpYnJhdGUgPSBcInZpYnJhdGVcIixcbiAgICB2aWJyYXRlRHVyYXRpb24gPSBcInZpYnJhdGVEdXJhdGlvblwiLFxuICAgIGFjdGlvbnMgPSBcImFjdGlvbnNcIixcbiAgICBpbnZva2VBcHAgPSBcImludm9rZUFwcFwiLFxuICAgIHRhZyA9IFwidGFnXCIsXG4gICAgcmVwZWF0VHlwZSA9IFwicmVwZWF0VHlwZVwiLFxuICAgIHJlcGVhdFRpbWUgPSBcInJlcGVhdFRpbWVcIixcbiAgICBvbmdvaW5nID0gXCJvbmdvaW5nXCIsXG4gICAgYWxsb3dXaGlsZUlkbGUgPSBcImFsbG93V2hpbGVJZGxlXCIsXG4gICAgZG9udE5vdGlmeUluRm9yZWdyb3VuZCA9IFwiZG9udE5vdGlmeUluRm9yZWdyb3VuZFwiLFxuICAgIHByaW9yaXR5ID0gXCJwcmlvcml0eVwiLFxuICAgIGltcG9ydGFuY2UgPSBcImltcG9ydGFuY2VcIixcbiAgICB2aXNpYmlsaXR5ID0gXCJ2aXNpYmlsaXR5XCIsXG4gICAgZGF0YSA9IFwiZGF0YVwiXG59XG5cbmV4cG9ydCBlbnVtIEltcG9ydGFuY2Uge1xuICAgIE1BWCA9IFwibWF4XCIsXG4gICAgSElHSCA9IFwiaGlnaFwiLFxuICAgIERFRkFVTFQgPSBcImRlZmF1bHRcIixcbiAgICBMT1cgPSBcImxvd1wiLFxuICAgIE1JTiA9IFwibWluXCIsXG4gICAgTk9ORSA9IFwibm9uZVwiLFxuICAgIFVOU1BFQ0lGSUVEID0gXCJ1bnNwZWNpZmllZFwiLFxufVxuXG5leHBvcnQgZW51bSBQcmlvcml0eSB7XG4gICAgTUFYID0gXCJtYXhcIixcbiAgICBISUdIID0gXCJoaWdoXCIsXG4gICAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxuICAgIExPVyA9IFwibG93XCIsXG4gICAgTUlOID0gXCJtaW5cIixcbn1cblxuZXhwb3J0IGVudW0gUmVwZWF0VHlwZSB7XG4gICAgSE9VUiA9IFwiaG91clwiLFxuICAgIE1JTlVURSA9IFwibWludXRlXCIsXG4gICAgREFZID0gXCJkYXlcIixcbiAgICBXRUVLID0gXCJ3ZWVrXCIsXG4gICAgQ1VTVE9NX1RJTUUgPSBcImN1c3RvbV90aW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIFZpc2liaWxpdHkge1xuICAgIFBVQkxJQyA9IFwicHVibGljXCIsXG4gICAgU0VDUkVUID0gXCJzZWNyZXRcIixcbiAgICBQUklWQVRFID0gXCJwcml2YXRlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZU1lc3NhZ2VCdWlsZGVyIHtcbiAgICBUTyA9IFwidG9cIixcbiAgICBNRVNTQUdFX0lEID0gXCJtZXNzYWdlSWRcIixcbiAgICBNRVNTQUdFX1RZUEUgPSBcIm1lc3NhZ2VUeXBlXCIsXG4gICAgVFRMID0gXCJ0dGxcIixcbiAgICBDT0xMQVBTRV9LRVkgPSBcImNvbGxhcHNlS2V5XCIsXG4gICAgUkVDRUlQVF9NT0RFID0gXCJyZWNlaXB0TW9kZVwiLFxuICAgIFNFTkRfTU9ERSA9IFwic2VuZE1vZGVcIixcbiAgICBEQVRBID0gXCJkYXRhXCIsXG59XG5cbmNsYXNzIENvcmRvdmFSZW1vdGVNZXNzYWdlIHtcbiAgICBzdGF0aWMgSU5TVEFOQ0VfSURfU0NPUEUgPSBcIkhDTVwiO1xuXG4gICAgc3RhdGljIFBSSU9SSVRZX1VOS05PV04gPSAwO1xuICAgIHN0YXRpYyBQUklPUklUWV9ISUdIID0gMTtcbiAgICBzdGF0aWMgUFJJT1JJVFlfTk9STUFMID0gMjtcblxuICAgIHN0YXRpYyBDT0xMQVBTRUtFWSA9IFwiY29sbGFwc2VLZXlcIjtcbiAgICBzdGF0aWMgREFUQSA9IFwiZGF0YVwiO1xuICAgIHN0YXRpYyBEQVRBT0ZNQVAgPSBcImRhdGFPZk1hcFwiO1xuICAgIHN0YXRpYyBNRVNTQUdFSUQgPSBcIm1lc3NhZ2VJZFwiO1xuICAgIHN0YXRpYyBNRVNTQUdFVFlQRSA9IFwibWVzc2FnZVR5cGVcIjtcbiAgICBzdGF0aWMgT1JJR0lOQUxVUkdFTkNZID0gXCJvcmlnaW5hbFVyZ2VuY3lcIjtcbiAgICBzdGF0aWMgVVJHRU5DWSA9IFwidXJnZW5jeVwiO1xuICAgIHN0YXRpYyBUVEwgPSBcInR0bFwiO1xuICAgIHN0YXRpYyBTRU5UVElNRSA9IFwic2VudFRpbWVcIjtcbiAgICBzdGF0aWMgVE8gPSBcInRvXCI7XG4gICAgc3RhdGljIEZST00gPSBcImZyb21cIjtcbiAgICBzdGF0aWMgVE9LRU4gPSBcInRva2VuXCI7XG4gICAgc3RhdGljIEFOQUxZVElDSU5GTyA9IFwiYW5hbHl0aWNJbmZvXCI7XG4gICAgc3RhdGljIEFOQUxZVElDSU5GT01BUCA9IFwiYW5hbHl0aWNJbmZvTWFwXCI7XG5cbiAgICBzdGF0aWMgTk9USUZJQ0FUSU9OID0ge1xuICAgICAgICBUSVRMRTogXCJ0aXRsZVwiLFxuICAgICAgICBUSVRMRUxPQ0FMSVpBVElPTktFWTogXCJ0aXRsZUxvY2FsaXphdGlvbktleVwiLFxuICAgICAgICBUSVRMRUxPQ0FMSVpBVElPTkFSR1M6IFwidGl0bGVMb2NhbGl6YXRpb25BcmdzXCIsXG4gICAgICAgIEJPRFlMT0NBTElaQVRJT05LRVk6IFwiYm9keUxvY2FsaXphdGlvbktleVwiLFxuICAgICAgICBCT0RZTE9DQUxJWkFUSU9OQVJHUzogXCJib2R5TG9jYWxpemF0aW9uQXJnc1wiLFxuICAgICAgICBCT0RZOiBcImJvZHlcIixcbiAgICAgICAgSUNPTjogXCJpY29uXCIsXG4gICAgICAgIFNPVU5EOiBcIlNvdW5kXCIsXG4gICAgICAgIFRBRzogXCJUYWdcIixcbiAgICAgICAgQ09MT1I6IFwiQ29sb3JcIixcbiAgICAgICAgQ0xJQ0tBQ1RJT046IFwiQ2xpY2tBY3Rpb25cIixcbiAgICAgICAgQ0hBTk5FTElEOiBcIkNoYW5uZWxJZFwiLFxuICAgICAgICBJTUFHRVVSTDogXCJJbWFnZVVybFwiLFxuICAgICAgICBMSU5LOiBcIkxpbmtcIixcbiAgICAgICAgTk9USUZZSUQ6IFwiTm90aWZ5SWRcIixcbiAgICAgICAgV0hFTjogXCJXaGVuXCIsXG4gICAgICAgIExJR0hUU0VUVElOR1M6IFwiTGlnaHRTZXR0aW5nc1wiLFxuICAgICAgICBCQURHRU5VTUJFUjogXCJCYWRnZU51bWJlclwiLFxuICAgICAgICBJTVBPUlRBTkNFOiBcIkltcG9ydGFuY2VcIixcbiAgICAgICAgVElDS0VSOiBcIlRpY2tlclwiLFxuICAgICAgICBWSUJSQVRFQ09ORklHOiBcInZpYnJhdGVDb25maWdcIixcbiAgICAgICAgVklTSUJJTElUWTogXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIElOVEVOVFVSSTogXCJpbnRlbnRVcmlcIixcbiAgICAgICAgSVNBVVRPQ0FOQ0VMOiBcImlzQXV0b0NhbmNlbFwiLFxuICAgICAgICBJU0xPQ0FMT05MWTogXCJpc0xvY2FsT25seVwiLFxuICAgICAgICBJU0RFRkFVTFRMSUdIVDogXCJpc0RlZmF1bHRMaWdodFwiLFxuICAgICAgICBJU0RFRkFVTFRTT1VORDogXCJpc0RlZmF1bHRTb3VuZFwiLFxuICAgICAgICBJU0RFRkFVTFRWSUJSQVRFOiBcImlzRGVmYXVsdFZpYnJhdGVcIixcbiAgICB9O1xuICAgIHJlbW90ZU1zZzogYW55O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMucmVtb3RlTXNnID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIHBhcnNlIGFsbCBlbGVtZW50LHVub3JkZXJlZFxuICAgICAqL1xuICAgIHBhcnNlTXNnQWxsQXR0cmlidXRlKCkge1xuICAgICAgICBsZXQgcHVzaFJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVtb3RlTXNnKSB7XG4gICAgICAgICAgICBwdXNoUmVzdWx0ID0gcHVzaFJlc3VsdCArIGtleSArIFwiIDogXCIgKyB0aGlzLnJlbW90ZU1zZ1trZXldICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHVzaFJlc3VsdDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldENvbGxhcHNlS2V5KCkgT2J0YWlucyB0aGUgY2xhc3NpZmljYXRpb24gaWRlbnRpZmllciAoY29sbGFwc2Uga2V5KSBvZiBhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgZ2V0Q29sbGFwc2VLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5DT0xMQVBTRUtFWV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBnZXREYXRhKCkgT2J0YWlucyB2YWxpZCBjb250ZW50IGRhdGEgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5EQVRBXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldERhdGFPZk1hcCgpIGEgbWVzc2FnZSBtYXAuXG4gICAgICovXG4gICAgZ2V0RGF0YU9mTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuREFUQU9GTUFQXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldE1lc3NhZ2VJZCgpIE9idGFpbnMgdGhlIElEIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5NRVNTQUdFSURdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0TWVzc2FnZVR5cGUoKSBPYnRhaW5zIHRoZSB0eXBlIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk1FU1NBR0VUWVBFXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldE9yaWdpbmFsVXJnZW5jeSgpIE9idGFpbnMgdGhlIG9yaWdpbmFsIHByaW9yaXR5IG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRPcmlnaW5hbFVyZ2VuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5PUklHSU5BTFVSR0VOQ1ldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VXJnZW5jeSgpIE9idGFpbnMgcHJpb3JpdHkgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldFVyZ2VuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5VUkdFTkNZXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldFR0bCgpIE9idGFpbnMgdmFsaWQgZ2V0VHRsIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRUdGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UVExdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0U2VudFRpbWUoKSBPYnRhaW5zIHRoZSB0aW1lIHdoZW4gYSBtZXNzYWdlIGlzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIGdldFNlbnRUaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuU0VOVFRJTUVdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VG8oKSBPYnRhaW5zIHRoZSByZWNpcGllbnQgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldFRvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuVE9dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0RnJvbSgpIE9idGFpbnMgdGhlIHNlbmRlciBvZiBhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgZ2V0RnJvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLkZST01dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VG9rZW4oKSBPYnRhaW5zIHZhbGlkIHRva2VuXG4gICAgICovXG4gICAgZ2V0VG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UT0tFTl07XG4gICAgfVxuXG4gICAgZ2V0QW5hbHl0aWNJbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuQU5BTFlUSUNJTkZPXTtcbiAgICB9XG5cbiAgICBnZXRBbmFseXRpY0luZm9NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5BTkFMWVRJQ0lORk9NQVBdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlKCkgT2J0YWlucyB0aGUgdGl0bGUgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Tm90aWZpY2F0aW9uVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlTG9jYWxpemF0aW9uS2V5KCkgT2J0YWlucyB0aGUga2V5IG9mIHRoZSBkaXNwbGF5ZWQgdGl0bGUgb2YgYSBub3RpZmljYXRpb24gbWVzc2FnZVxuICAgICAqL1xuICAgIGdldFRpdGxlTG9jYWxpemF0aW9uS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVMT0NBTElaQVRJT05LRVlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRUaXRsZUxvY2FsaXphdGlvbkFyZ3MoKSBPYnRhaW5zIHZhcmlhYmxlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3BsYXllZCB0aXRsZSBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRUaXRsZUxvY2FsaXphdGlvbkFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tcbiAgICAgICAgICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5USVRMRUxPQ0FMSVpBVElPTkFSR1NcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCb2R5TG9jYWxpemF0aW9uS2V5KCkgT2J0YWlucyB0aGUga2V5IG9mIHRoZSBkaXNwbGF5ZWQgY29udGVudCBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQk9EWUxPQ0FMSVpBVElPTktFWVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEJvZHlMb2NhbGl6YXRpb25BcmdzKCkgT2J0YWlucyB2YXJpYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXNwbGF5ZWQgY29udGVudCBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uQXJncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xuICAgICAgICAgICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJPRFlMT0NBTElaQVRJT05BUkdTXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Qm9keSgpIE9idGFpbnMgdGhlIGJvZHkgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5CT0RZXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJY29uKCkgT2J0YWlucyB0aGUgaWNvbiBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklDT05dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFNvdW5kKCkgT2J0YWlucyB0aGUgc291bmQgZnJvbSBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRTb3VuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5TT1VORF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGFnKCkgT2J0YWlucyB0aGUgdGFnIGZyb20gYSBtZXNzYWdlIGZvciBtZXNzYWdlIG92ZXJ3cml0aW5nXG4gICAgICovXG4gICAgZ2V0VGFnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlRBR107XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q29sb3IoKSBPYnRhaW5zIHRoZSBjb2xvcnMgb2YgaWNvbnMgaW4gYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQ09MT1JdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldENsaWNrQWN0aW9uKCkgT2J0YWlucyBhY3Rpb25zIHRyaWdnZXJlZCBieSBtZXNzYWdlIHRhcHBpbmdcbiAgICAgKi9cbiAgICBnZXRDbGlja0FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5DTElDS0FDVElPTl07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q2hhbm5lbElkKCkgT2J0YWlucyBJRHMgb2YgY2hhbm5lbHMgdGhhdCBzdXBwb3J0IHRoZSBkaXNwbGF5IG9mIG1lc3NhZ2VzXG4gICAgICovXG4gICAgZ2V0Q2hhbm5lbElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkNIQU5ORUxJRF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW1hZ2VVcmwoKSBPYnRhaW5zIHRoZSBpbWFnZSBVUkwgZnJvbSBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRJbWFnZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JTUFHRVVSTF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGluaygpIE9idGFpbnMgdGhlIFVSTCB0byBiZSBhY2Nlc3NlZCBmcm9tIGEgbWVzc2FnZVxuICAgICAqL1xuICAgIGdldExpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uTElOS107XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Tm90aWZ5SWQoKSBPYnRhaW5zIHRoZSB1bmlxdWUgSUQgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Tm90aWZ5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uTk9USUZZSURdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFdoZW4oKVxuICAgICAqL1xuICAgIGdldFdoZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uV0hFTl07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGlnaHRTZXR0aW5ncygpXG4gICAgICovXG4gICAgZ2V0TGlnaHRTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5MSUdIVFNFVFRJTkdTXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCYWRnZU51bWJlcigpXG4gICAgICovXG4gICAgZ2V0QmFkZ2VOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQkFER0VOVU1CRVJdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEltcG9ydGFuY2UoKVxuICAgICAqL1xuICAgIGdldEltcG9ydGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU1QT1JUQU5DRV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGlja2VyKClcbiAgICAgKi9cbiAgICBnZXRUaWNrZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElDS0VSXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRWaWJyYXRlQ29uZmlnKClcbiAgICAgKi9cbiAgICBnZXRWaWJyYXRlQ29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlZJQlJBVEVDT05GSUddO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFZpc2liaWxpdHkoKVxuICAgICAqL1xuICAgIGdldFZpc2liaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVklTSUJJTElUWV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW50ZW50VXJpKClcbiAgICAgKi9cbiAgICBnZXRJbnRlbnRVcmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU5URU5UVVJJXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjppc0F1dG9DYW5jZWwoKVxuICAgICAqL1xuICAgIGlzQXV0b0NhbmNlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0FVVE9DQU5DRUxdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEludGVudFVyaSgpXG4gICAgICovXG4gICAgaXNMb2NhbE9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNMT0NBTE9OTFldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmlzRGVmYXVsdExpZ2h0KClcbiAgICAgKi9cbiAgICBpc0RlZmF1bHRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0RFRkFVTFRMSUdIVF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246aXNEZWZhdWx0U291bmQoKVxuICAgICAqL1xuICAgIGlzRGVmYXVsdFNvdW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklTREVGQVVMVFNPVU5EXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjppc0RlZmF1bHRWaWJyYXRlKClcbiAgICAgKi9cbiAgICBpc0RlZmF1bHRWaWJyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNERUZBVUxUVklCUkFURVxuICAgICAgICBdO1xuICAgIH1cbn1cblxudHlwZSBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdCA9IHtcbiAgICBba2V5IGluIEF0dHJdPzogYW55O1xufTtcblxudHlwZSBSZW1vdGVNZXNzYWdlT2JqZWN0ID0ge1xuICAgIFtrZXkgaW4gUmVtb3RlTWVzc2FnZUJ1aWxkZXJdPzogYW55O1xufTtcblxuaW50ZXJmYWNlIElkVGFnIHtcblx0aWQ6bnVtYmVyLFxuXHR0YWc6c3RyaW5nXG59Il19
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvbmF0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxPQUFPLHVDQUErQyxNQUFNLCtCQUErQixDQUFDOztJQVUvRCwyQkFBMEI7OztRQUNuRCx1QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN0QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1Qyx5QkFBbUIsR0FBRyxLQUFLLENBQUM7OztJQUU1Qjs7O09BR0c7SUFDSCxzQkFBSTtJQUtKLDhCQUFZO0lBS1osK0JBQWE7SUFLYjs7O09BR0c7SUFDSCw0QkFBVTtJQUtWOzs7T0FHRztJQUNILDZCQUFXO0lBS1g7OztPQUdHO0lBQ0gsdUJBQUs7SUFLTDs7O09BR0c7SUFDSCx5QkFBTztJQUtQOzs7O09BSUc7SUFDSCwwQkFBUSxhQUFDLEtBQWM7SUFLdkI7Ozs7T0FJRztJQUNILHVDQUFxQixhQUFDLFNBQWlCO0lBS3ZDOzs7T0FHRztJQUNILGlDQUFlO0lBS2Y7OztPQUdHO0lBQ0gsNEJBQVU7SUFLVjs7OztPQUlHO0lBQ0gsNkJBQVcsYUFBQyxLQUFjO0lBSzFCOzs7O09BSUc7SUFDSCwwQ0FBd0IsYUFBQyxTQUFpQjtJQUsxQzs7OztPQUlHO0lBQ0gsMkJBQVMsYUFBQyxLQUFhO0lBS3ZCOzs7O09BSUc7SUFDSCw2QkFBVyxhQUFDLEtBQWE7SUFLekI7Ozs7T0FJRztJQUNILG9DQUFrQixhQUFDLE9BQWdCO0lBS25DLHlCQUFPO0lBS1A7OztPQUdHO0lBQ0gsbUNBQWlCO0lBS2pCLHdDQUFzQjtJQUt0QixtQ0FBaUIsYUFBQyxhQUFrQztJQUtwRCxtQ0FBaUIsYUFBQyxRQUFnQjtJQUtsQyx5QkFBTyxhQUFDLEdBQVcsRUFBRSxLQUFhO0lB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LGVBQWU7UUFDOUIsV0FBVyxFQUFFLGFBQWE7UUFDMUIsVUFBVSxFQUFFLFlBQVk7UUFDeEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsYUFBYSxFQUFFLGVBQWU7UUFDOUIsVUFBVSxFQUFFLFlBQVk7UUFDeEIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsWUFBWSxFQUFFLGNBQWM7UUFDNUIsV0FBVyxFQUFFLGFBQWE7UUFDMUIsY0FBYyxFQUFFLGdCQUFnQjtRQUNoQyxjQUFjLEVBQUUsZ0JBQWdCO1FBQ2hDLGdCQUFnQixFQUFFLGtCQUFrQjtLQUN2QyxDQUFDOytCQXJzQk47O1NBa3BCTSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gICAgQ29weXJpZ2h0IDIwMjAtMjAyNC4gSHVhd2VpIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpXHJcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuXHJcbiAgICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUGx1Z2luLCBDb3Jkb3ZhLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB9IGZyb20gXCJAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZVwiO1xyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhtc1B1c2hcIixcclxuICAgIHBsdWdpbjogXCJAaG1zY29yZS9jb3Jkb3ZhLXBsdWdpbi1obXMtcHVzaFwiLFxyXG4gICAgcGx1Z2luUmVmOiBcIkhtc1B1c2hcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIbXNQdXNoIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xyXG4gICAgSG1zUHVzaFJlc3VsdENvZGUgPSBIbXNQdXNoUmVzdWx0Q29kZTtcclxuICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlID0gQ29yZG92YVJlbW90ZU1lc3NhZ2U7XHJcbiAgICBSZW1vdGVNZXNzYWdlQnVpbGRlciA9IFJlbW90ZU1lc3NhZ2VCdWlsZGVyO1xyXG4gICAgREVGQVVMVF9UT0tFTl9TQ09QRSA9IFwiSENNXCI7XHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCAgaW5pdGlhbGl6ZWQgSG1zUHVzaC5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cclxuICAgICAqL1xyXG4gICAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGVuYWJsZUxvZ2dlcigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGRpc2FibGVMb2dnZXIoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgZGlzcGxheSBvZiBub3RpZmljYXRpb24gbWVzc2FnZXMuIElmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIGRpc3BsYXkgb2Ygbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGluIGFuIGFwcCwgeW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kLiBUaGlzIG1ldGhvZCBhcHBsaWVzIHRvIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBidXQgbm90IGRhdGEgbWVzc2FnZXMuIEl0IGlzIHRoZSBhcHAgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGF0YSBtZXNzYWdpbmcuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgdHVybk9uUHVzaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbmFibGUgdGhlIGRpc3BsYXkgb2Ygbm90aWZpY2F0aW9uIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBpbiBhbiBhcHAsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZC4gVGhpcyBtZXRob2QgYXBwbGllcyB0byBub3RpZmljYXRpb24gbWVzc2FnZXMgYnV0IG5vdCBkYXRhIG1lc3NhZ2VzLiBJdCBpcyB0aGUgYXBwIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIGRhdGEgbWVzc2FnaW5nLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIHR1cm5PZmZQdXNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiBhbiBBQUlEIGluIHN5bmNocm9ub3VzIG1vZGUuIEJlZm9yZSBhcHBseWluZyBmb3IgYSB0b2tlbiwgYW4gYXBwIGNhbGxzIHRoaXMgbWV0aG9kIHRvIG9idGFpbiBpdHMgdW5pcXVlIEFBSUQuIFRoZSBIVUFXRUkgUHVzaCBzZXJ2ZXIgZ2VuZXJhdGVzIGEgdG9rZW4gZm9yIHRoZSBhcHAgYmFzZWQgb24gdGhlIEFBSUQuIElmIHRoZSBBQUlEIG9mIHRoZSBhcHAgY2hhbmdlcywgYSBuZXcgdG9rZW4gd2lsbCBiZSBnZW5lcmF0ZWQgbmV4dCB0aW1lIHdoZW4gdGhlIGFwcCBhcHBsaWVzIGZvciBhIHRva2VuLiBJZiBhbiBhcHAgbmVlZHMgdG8gcmVwb3J0IHN0YXRpc3RpY3MgZXZlbnRzLCBpdCBtdXN0IGNhcnJ5IHRoZSBBQUlEIGFzIGl0cyB1bmlxdWUgSUQuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgZ2V0SWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYW4gQUFJRCBpbiBhc3luY2hyb25vdXMgbW9kZS5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICovXHJcbiAgICBnZXRBQUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb2J0YWluIGEgdG9rZW4gcmVxdWlyZWQgZm9yIGFjY2Vzc2luZyBIVUFXRUkgUHVzaCBLaXQuIElmIHRoZXJlIGlzIG5vIGxvY2FsIEFBSUQsIHRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhbiBBQUlEIHdoZW4gaXQgaXMgY2FsbGVkIGJlY2F1c2UgdGhlIEhVQVdFSSBQdXNoIEtpdCBzZXJ2ZXIgbmVlZHMgdG8gZ2VuZXJhdGUgYSB0b2tlbiBiYXNlZCBvbiB0aGUgQUFJRC5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICogQHBhcmFtcyBzY29wZSA/IDogU3RyaW5nXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuKHNjb3BlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogT2J0YWlucyBhIHRva2VuIHRoYXQgYSB0YXJnZXQgYXBwIGRldmVsb3BlciBhcHBsaWVzIGZvciBhIHNlbmRlciB0byBpbnRlZ3JhdGUgUHVzaCBLaXQgaW4gdGhlIG11bHRpLXNlbmRlciBzY2VuYXJpby5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICogQHBhcmFtcyBzdWJqZWN0SWQgPyA6IFN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRUb2tlbldpdGhTdWJqZWN0SWQoc3ViamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiB0aGUgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgb2YgYW4gQUFJRC5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICovXHJcbiAgICBnZXRDcmVhdGlvblRpbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSBsb2NhbCBBQUlEIGFuZCBpdHMgZ2VuZXJhdGlvbiB0aW1lc3RhbXAuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgZGVsZXRlQUFJRCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSB0b2tlbi4gQWZ0ZXIgYSB0b2tlbiBpcyBkZWxldGVkLCB0aGUgY29ycmVzcG9uZGluZyBBQUlEIHdpbGwgbm90IGJlIGRlbGV0ZWQuIFRoaXMgbWV0aG9kIGlzIGEgc3luY2hyb25vdXMgbWV0aG9kLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKiBAcGFyYW1zIHNjb3BlID8gOiBTdHJpbmdcclxuICAgICAqL1xyXG4gICAgZGVsZXRlVG9rZW4oc2NvcGU/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBhIHRva2VuIHRoYXQgYSB0YXJnZXQgYXBwIGRldmVsb3BlciBhcHBsaWVzIGZvciBhIHNlbmRlciB0byBpbnRlZ3JhdGUgUHVzaCBLaXQgaW4gdGhlIG11bHRpLXNlbmRlciBzY2VuYXJpby5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICogQHBhcmFtcyBzdWJqZWN0SWQgPyA6IFN0cmluZ1xyXG4gICAgICovXHJcbiAgICBkZWxldGVUb2tlbldpdGhTdWJqZWN0SWQoc3ViamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHN1YnNjcmliZSB0byB0b3BpY3MgaW4gYXN5bmNocm9ub3VzIG1vZGUuIFRoZSBIVUFXRUkgUHVzaCBLaXQgdG9waWMgbWVzc2FnaW5nIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2VuZCBtZXNzYWdlcyB0byBtdWx0aXBsZSBkZXZpY2VzIHdob3NlIHVzZXJzIGhhdmUgc3Vic2NyaWJlZCB0byBhIHNwZWNpZmljIHRvcGljLiBZb3UgY2FuIHdyaXRlIG1lc3NhZ2VzIGFib3V0IHRoZSB0b3BpYyBhcyByZXF1aXJlZCwgYW5kIEhVQVdFSSBQdXNoIEtpdCBkZXRlcm1pbmVzIHRoZSByZWxlYXNlIHBhdGggYW5kIHNlbmRzIG1lc3NhZ2VzIHRvIHRoZSBjb3JyZWN0IGRldmljZXMgaW4gYSByZWxpYWJsZSBtYW5uZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgc3Vic2NyaWJlZCB0by5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICovXHJcbiAgICBzdWJzY3JpYmUodG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gdG9waWNzIHRoYXQgYXJlIHN1YnNjcmliZWQgdG8gdGhyb3VnaCB0aGUgc3Vic2NyaWJlIG1ldGhvZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BpYyBUb3BpYyB0byBiZSB1bnN1YnNjcmliZWQgdG8uXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgdW5zdWJzY3JpYmUodG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbi4gSWYgdGhlIGVuYWJsZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRydWUsIHRoZSBTREsgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYW4gQUFJRCBhbmQgYXBwbGllcyBmb3IgYSB0b2tlbi5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgYXV0b21hdGljIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzZXRBdXRvSW5pdEVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0T2RpZCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYXV0b21hdGljIGluaXRpYWxpemF0aW9uIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgaXNBdXRvSW5pdEVuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBnZXRJbml0aWFsTm90aWZpY2F0aW9uKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBzZW5kUmVtb3RlTWVzc2FnZShyZW1vdGVNZXNzYWdlOiBSZW1vdGVNZXNzYWdlT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBzZXRCYWNrZ3JvdW5kRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHJlbW92ZUJhY2tncm91bmRGaWxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhtc0xvY2FsTm90aWZpY2F0aW9uXCIsXHJcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcclxuICAgIHBsdWdpblJlZjogXCJIbXNMb2NhbE5vdGlmaWNhdGlvblwiLFxyXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXHJcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXHJcbn0pXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEhtc0xvY2FsTm90aWZpY2F0aW9uIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xyXG4gICAgQXR0ciA9IEF0dHI7XHJcbiAgICBJbXBvcnRhbmNlID0gSW1wb3J0YW5jZTtcclxuICAgIFByaW9yaXR5ID0gUHJpb3JpdHk7XHJcbiAgICBSZXBlYXRUeXBlID0gUmVwZWF0VHlwZTtcclxuICAgIFZpc2liaWxpdHkgPSBWaXNpYmlsaXR5O1xyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBsb2NhbE5vdGlmaWNhdGlvbihcclxuICAgICAgICBsb2NhbE5vdGlmaWNhdGlvbjogTG9jYWxOb3RpZmljYXRpb25PYmplY3RcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBsb2NhbE5vdGlmaWNhdGlvblNjaGVkdWxlKFxyXG4gICAgICAgIGxvY2FsTm90aWZpY2F0aW9uOiBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdFxyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNhbmNlbEFsbE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY2FuY2VsU2NoZWR1bGVkTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNhbmNlbE5vdGlmaWNhdGlvbnNXaXRoSWQoaWQ6IG51bWJlcltdKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zV2l0aElkVGFnKGlkVGFnOiBJZFRhZ1tdKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zV2l0aFRhZyh0YWc6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0Tm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0U2NoZWR1bGVkTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0Q2hhbm5lbHMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNoYW5uZWxFeGlzdHMoY2hhbm5lbElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNoYW5uZWxCbG9ja2VkKGNoYW5uZWxJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBkZWxldGVDaGFubmVsKGNoYW5uZWxJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG59XHJcblxyXG5AUGx1Z2luKHtcclxuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaEV2ZW50XCIsXHJcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcclxuICAgIHBsdWdpblJlZjogXCJIbXNQdXNoRXZlbnRcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIbXNQdXNoRXZlbnQgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25SZW1vdGVNZXNzYWdlUmVjZWl2ZWQoY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uVG9rZW5SZWNlaXZlZChjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25Ub2tlbkVycm9yKGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvblB1c2hNZXNzYWdlU2VudChjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25QdXNoTWVzc2FnZVNlbnRFcnJvcihjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25QdXNoTWVzc2FnZVNlbnREZWxpdmVyZWQoY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uTG9jYWxOb3RpZmljYXRpb25BY3Rpb24oY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uTm90aWZpY2F0aW9uT3BlbmVkQXBwKGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvbk11bHRpU2VuZGVyVG9rZW5SZWNlaXZlZEV2ZW50KGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvbk11bHRpU2VuZGVyVG9rZW5FcnJvckV2ZW50KGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIFJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRUQgPSBcIlJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRURcIjtcclxuICAgIFRPS0VOX1JFQ0VJVkVEX0VWRU5UID0gXCJUT0tFTl9SRUNFSVZFRF9FVkVOVFwiO1xyXG4gICAgT05fVE9LRU5fRVJST1JfRVZFTlQgPSBcIk9OX1RPS0VOX0VSUk9SX0VWRU5UXCI7XHJcbiAgICBOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UID0gXCJOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UXCI7XHJcbiAgICBMT0NBTF9OT1RJRklDQVRJT05fQUNUSU9OX0VWRU5UID0gXCJMT0NBTF9OT1RJRklDQVRJT05fQUNUSU9OX0VWRU5UXCI7XHJcbiAgICBPTl9QVVNIX01FU1NBR0VfU0VOVCA9IFwiT05fUFVTSF9NRVNTQUdFX1NFTlRcIjtcclxuICAgIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0VSUk9SID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVF9FUlJPUlwiO1xyXG4gICAgT05fUFVTSF9NRVNTQUdFX1NFTlRfREVMSVZFUkVEID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVF9ERUxJVkVSRURcIjtcclxuICAgIE9OX01VTFRJX1NFTkRFUl9UT0tFTl9FUlJPUl9FVkVOVCA9IFwiT05fTVVMVElfU0VOREVSX1RPS0VOX0VSUk9SX0VWRU5UXCI7XHJcbiAgICBPTl9NVUxUSV9TRU5ERVJfVE9LRU5fUkVDRUlWRURfRVZFTlQgPSBcIk9OX01VTFRJX1NFTkRFUl9UT0tFTl9SRUNFSVZFRF9FVkVOVFwiO1xyXG59XHJcblxyXG5AUGx1Z2luKHtcclxuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaFByb2ZpbGVcIixcclxuICAgIHBsdWdpbjogXCJAaG1zY29yZS9jb3Jkb3ZhLXBsdWdpbi1obXMtcHVzaFwiLFxyXG4gICAgcGx1Z2luUmVmOiBcIkhtc1B1c2hQcm9maWxlXCIsXHJcbiAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcclxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSxcclxufSlcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSG1zUHVzaFByb2ZpbGUgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XHJcbiAgICBIVUFXRUlfUFJPRklMRSA9IDE7XHJcbiAgICBDVVNUT01fUFJPRklMRSA9IDI7XHJcbiAgICBVTkRFRklORURfUFJPRklMRSA9IC0xO1xyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGlzU3VwcG9ydFByb2ZpbGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBhZGRQcm9maWxlKHR5cGU6IG51bWJlciwgcHJvZmlsZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgYWRkUHJvZmlsZVdpdGhTdWJqZWN0SWQoXHJcbiAgICAgICAgc3ViamVjdElkOiBzdHJpbmcsXHJcbiAgICAgICAgdHlwZTogbnVtYmVyLFxyXG4gICAgICAgIHByb2ZpbGVJZDogc3RyaW5nXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZGVsZXRlUHJvZmlsZShwcm9maWxlSWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBkZWxldGVQcm9maWxlV2l0aFN1YmplY3RJZChcclxuICAgICAgICBzdWJqZWN0SWQ6IHN0cmluZyxcclxuICAgICAgICBwcm9maWxlSWQ6IHN0cmluZ1xyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEhtc1B1c2hSZXN1bHRDb2RlIHtcclxuICAgIC8vIFN1Y2Nlc3NcclxuICAgIFNVQ0NFU1MgPSBcIjBcIixcclxuXHJcbiAgICAvLyBFcnJvclxyXG4gICAgRVJST1IgPSBcIi0xXCIsXHJcblxyXG4gICAgLy8gQnVuZGxlIGlzIG51bGwsIGV4Y2VwdGlvblxyXG4gICAgTlVMTF9CVU5ETEUgPSBcIjMzM1wiLFxyXG5cclxuICAgIC8vIFlvdSBkbyBub3QgaGF2ZSBhIHRva2VuLiBBcHBseSBmb3IgYSB0b2tlbi5cclxuICAgIEVSUk9SX05PX1RPS0VOID0gXCI5MDcxMjIwMzBcIixcclxuXHJcbiAgICAvLyBUaGUgY3VycmVudCBuZXR3b3JrIGlzIHVuYXZhaWxhYmxlLiBDaGVjayB0aGUgbmV0d29yayBjb25uZWN0aW9uLlxyXG4gICAgRVJST1JfTk9fTkVUV09SSyA9IFwiOTA3MTIyMDMxXCIsXHJcblxyXG4gICAgLy8gVGhlIHRva2VuIGhhcyBleHBpcmVkLiBEZWxldGUgdGhlIHRva2VuIGFuZCBhcHBseSBmb3IgYSBuZXcgb25lLlxyXG4gICAgRVJST1JfVE9LRU5fSU5WQUxJRCA9IFwiOTA3MTIyMDMyXCIsXHJcblxyXG4gICAgLy8gSWYgdGhlIFB1c2ggc2VydmljZSBpcyB1bmF2YWlsYWJsZSwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9TRVJWSUNFX05PVF9BVkFJTEFCTEUgPSBcIjkwNzEyMjA0NlwiLFxyXG5cclxuICAgIC8vIElmIHRoZSBQdXNoIHNlcnZlciByZXR1cm5zIGFuIGVycm9yLCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgIEVSUk9SX1BVU0hfU0VSVkVSID0gXCI5MDcxMjIwNDdcIixcclxuXHJcbiAgICAvLyBVbmtub3duIGVycm9yLiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgIEVSUk9SX1VOS05PV04gPSBcIjkwNzEyMjA0NVwiLFxyXG5cclxuICAgIC8vIFRoZSBudW1iZXIgb2Ygc3Vic2NyaWJlZCB0b3BpY3MgZXhjZWVkcyAyMDAwLlxyXG4gICAgRVJST1JfVE9QSUNfRVhDRUVEID0gXCI5MDcxMjIwMzRcIixcclxuXHJcbiAgICAvLyBGYWlsZWQgdG8gc2VuZCB0aGUgc3Vic2NyaXB0aW9uIHRvcGljLiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgIEVSUk9SX1RPUElDX1NFTkQgPSBcIjkwNzEyMjAzNVwiLFxyXG5cclxuICAgIC8vIFB1c2ggcmlnaHRzIGFyZSBub3QgZW5hYmxlZC4gRW5hYmxlIHRoZSBzZXJ2aWNlIGFuZCBzZXQgcHVzaCBzZXJ2aWNlIHBhcmFtZXRlcnMgYXQgQXBwR2FsbGVyeSBDb25uZWN0LlxyXG4gICAgRVJST1JfTk9fUklHSFQgPSBcIjkwNzEyMjAzNlwiLFxyXG5cclxuICAgIC8vIEZhaWxlZCB0byBhcHBseSBmb3IgdGhlIHRva2VuLiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgIEVSUk9SX0dFVF9UT0tFTl9FUlIgPSBcIjkwNzEyMjAzN1wiLFxyXG5cclxuICAgIC8vIE5vIHN0b3JhZ2UgbG9jYXRpb24gaXMgc2VsZWN0ZWQgZm9yIHRoZSBhcHBsaWNhdGlvbiBvciB0aGUgc3RvcmFnZSBsb2NhdGlvbiBpcyBpbnZhbGlkLlxyXG4gICAgRVJST1JfU1RPUkFHRV9MT0NBVElPTl9FTVBUWSA9IFwiOTA3MTIyMDM4XCIsXHJcblxyXG4gICAgLy8gRmFpbGVkIHRvIGFwcGx5IGZvciBhIHRva2VuLiBDcm9zcy1yZWdpb24gdG9rZW4gYXBwbGljYXRpb24gaXMgbm90IGFsbG93ZWQuXHJcbiAgICBFUlJPUl9OT1RfQUxMT1dfQ1JPU1NfQVBQTFkgPSBcIjkwNzEyMjA1M1wiLFxyXG5cclxuICAgIC8vIFRoZSBtZXNzYWdlIGJvZHkgc2l6ZSBleGNlZWRzIHRoZSBtYXhpbXVtLlxyXG4gICAgRVJST1JfU0laRSA9IFwiOTA3MTIyMDQxXCIsXHJcblxyXG4gICAgLy8gVGhlIG1lc3NhZ2UgY29udGFpbnMgaW52YWxpZCBwYXJhbWV0ZXJzLlxyXG4gICAgRVJST1JfSU5WQUxJRF9QQVJBTUVURVJTID0gXCI5MDcxMjIwNDJcIixcclxuXHJcbiAgICAvLyBUaGUgbnVtYmVyIG9mIHNlbnQgbWVzc2FnZXMgcmVhY2hlcyB0aGUgdXBwZXIgbGltaXQuIFRoZSBtZXNzYWdlcyB3aWxsIGJlIGRpc2NhcmRlZC5cclxuICAgIEVSUk9SX1RPT19NQU5ZX01FU1NBR0VTID0gXCI5MDcxMjIwNDNcIixcclxuXHJcbiAgICAvLyBUaGUgbWVzc2FnZSBsaWZldGltZSBleHBpcmVzIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgQVBQIHNlcnZlci5cclxuICAgIEVSUk9SX1RUTF9FWENFRURFRCA9IFwiOTA3MTIyMDQ0XCIsXHJcblxyXG4gICAgLy8gIEh1YXdlaSBNb2JpbGUgU2VydmljZXMgKEFQSykgY2FuJ3QgY29ubmVjdCAgSHVhd2VpIFB1c2ggIEtpdC5cclxuICAgIEVSUk9SX0hNU19DTElFTlRfQVBJID0gXCI5MDcxMjIwNDhcIixcclxuXHJcbiAgICAvLyBUaGUgY3VycmVudCBFTVVJIHZlcnNpb24gaXMgdG9vIGVhcmx5IHRvIHVzZSB0aGUgY2FwYWJpbGl0eS5cclxuICAgIEVSUk9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEID0gXCI5MDcxMjIwNDlcIixcclxuXHJcbiAgICAvLyBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgaW4gdGhlIG1haW4gdGhyZWFkLlxyXG4gICAgRVJST1JfTUFJTl9USFJFQUQgPSBcIjkwNzEyMjA1MFwiLFxyXG5cclxuICAgIC8vIFRoZSBkZXZpY2UgY2VydGlmaWNhdGUgYXV0aGVudGljYXRpb24gZmFpbHMuXHJcbiAgICBFUlJPUl9ITVNfREVWSUNFX0FVVEhfRkFJTEVEX1NFTEZfTUFQUElORyA9IFwiOTA3MTIyMDUxXCIsXHJcblxyXG4gICAgLy8gRmFpbGVkIHRvIGJpbmQgdGhlIHNlcnZpY2UuXHJcbiAgICBFUlJPUl9CSU5EX1NFUlZJQ0VfU0VMRl9NQVBQSU5HID0gXCI5MDcxMjIwNTJcIixcclxuXHJcbiAgICAvLyBUaGUgU0RLIGlzIGJlaW5nIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZWQuIFRyeSBhZ2FpbiBsYXRlci5cclxuICAgIEVSUk9SX0FVVE9fSU5JVElBTElaSU5HID0gXCI5MDcxMjIwNTRcIixcclxuXHJcbiAgICAvKlRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgaW5jb3JyZWN0LiBDaGVjayB3aGV0aGVyIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgY29ycmVjdC5cclxuICAgICAqIEV4YW1wbGU6IGFwcF9pZCBpbiB0aGUgYWdjb25uZWN0IC0gc2VydmljZXMuanNvbiBmaWxlO1xyXG4gICAgICogQ2hlY2sgd2hldGhlciB0aGUgYnVpbGQuZ3JhZGxlIGZpbGUgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUuXHJcbiAgICAgKi9cclxuICAgIEVSUk9SX0FSR1VNRU5UU19JTlZBTElEID0gXCI5MDcxMzUwMDBcIixcclxuXHJcbiAgICAvLyBJbnRlcm5hbCBQdXNoIGVycm9yLiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydCBlbmdpbmVlcnMuXHJcbiAgICBFUlJPUl9JTlRFUk5BTF9FUlJPUiA9IFwiOTA3MTM1MDAxXCIsXHJcblxyXG4gICAgLy8gVGhlIHNlcnZpY2UgZG9lcyBub3QgZXhpc3QuIFRoZSBpbnZva2VkIGludGVyZmFjZSBkb2VzIG5vdCBleGlzdC5cclxuICAgIEVSUk9SX05BTUlOR19JTlZBTElEID0gXCI5MDcxMzUwMDJcIixcclxuXHJcbiAgICAvLyBUaGUgQXBpQ2xpZW50IG9iamVjdCBpcyBpbnZhbGlkLlxyXG4gICAgRVJST1JfQ0xJRU5UX0FQSV9JTlZBTElEID0gXCI5MDcxMzUwMDNcIixcclxuXHJcbiAgICAvLyBJbnZva2luZyBBSURMIHRpbWVzIG91dC4gQ29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9FWEVDVVRFX1RJTUVPVVQgPSBcIjkwNzEzNTAwNFwiLFxyXG5cclxuICAgIC8vIFRoZSBjdXJyZW50IGFyZWEgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHNlcnZpY2UuXHJcbiAgICBFUlJPUl9OT1RfSU5fU0VSVklDRSA9IFwiOTA3MTM1MDA1XCIsXHJcblxyXG4gICAgLy8gSWYgdGhlIEFJREwgY29ubmVjdGlvbiBzZXNzaW9uIGlzIGludmFsaWQsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxyXG4gICAgRVJST1JfU0VTU0lPTl9JTlZBTElEID0gXCI5MDcxMzUwMDZcIixcclxuXHJcbiAgICAvLyBBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGludm9raW5nIGFuIHVuc3BlY2lmaWVkIEFQSS5cclxuICAgIEVSUk9SX0FQSV9OT1RfU1BFQ0lGSUVEID0gXCIxMDAyXCIsXHJcblxyXG4gICAgLyogRmFpbGVkIHRvIGludm9rZSB0aGUgZ2F0ZXdheSB0byBxdWVyeSB0aGUgYXBwbGljYXRpb24gc2NvcGUuXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGFwcCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBlbmFibGVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cclxuICAgICAqIElmIHllcywgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICAgKi9cclxuICAgIEVSUk9SX0dFVF9TQ09QRV9FUlJPUiA9IFwiOTA3MTM1NzAwXCIsXHJcbiAgICAvKiBTY29wZSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGUgQXBwR2FsbGVyeSBDb25uZWN0LlxyXG4gICAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBhcHAgaGFzIGJlZW4gY3JlYXRlZCBhbmQgZW5hYmxlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuXHJcbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxyXG4gICAgICovXHJcbiAgICBFUlJPUl9TQ09QRV9MSVNUX0VNUFRZID0gXCI5MDcxMzU3MDFcIixcclxuXHJcbiAgICAvKiBUaGUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIEFwcEdhbGxlcnkgQ29ubmVjdC5cclxuICAgICAqIDEuIENoZWNrIHdoZXRoZXIgeW91ciBwaG9uZSBjYW4gYWNjZXNzIHRoZSBJbnRlcm5ldC5cclxuICAgICAqIDIuIENoZWNrIHdoZXRoZXIgdGhlIGNvcnJlY3QgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgaXMgY29uZmlndXJlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuIEZvciBkZXRhaWxzLCBzZWUgQXBwR2FsbGVyeSBDb25uZWN0IGNvbmZpZ3VyYXRpb24gaW4gRGV2ZWxvcG1lbnQgUHJlcGFyYXRpb25zLlxyXG4gICAgICogMy4gSWYgdGhlIGNoZWNrIHJlc3VsdCBpcyBjb3JyZWN0LCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgICAqL1xyXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FTVBUWSA9IFwiOTA3MTM1NzAyXCIsXHJcblxyXG4gICAgLy8gUGVybWlzc2lvbiBpcyBub3QgY29uZmlndXJlZCBvbiB0aGUgQXBwR2FsbGVyeSBDb25uZWN0LlxyXG4gICAgRVJST1JfUEVSTUlTU0lPTl9MSVNUX0VNUFRZID0gXCI5MDcxMzU3MDNcIixcclxuXHJcbiAgICAvLyBUaGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGV4aXN0LlxyXG4gICAgRVJST1JfQVVUSF9JTkZPX05PVF9FWElTVCA9IFwiNjAwMlwiLFxyXG5cclxuICAgIC8vIEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB2ZXJpZmljYXRpb24uIENoZWNrIHdoZXRoZXIgdGhlIGNvcnJlY3QgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgaXMgY29uZmlndXJlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuIEZvciBkZXRhaWxzLCBzZWUgQXBwR2FsbGVyeSBDb25uZWN0IGNvbmZpZ3VyYXRpb24gaW4gRGV2ZWxvcG1lbnQgUHJlcGFyYXRpb25zLlxyXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FUlJPUiA9IFwiNjAwM1wiLFxyXG5cclxuICAgIC8vIEludGVyZmFjZSBhdXRoZW50aWNhdGlvbjogVGhlIHBlcm1pc3Npb24gZG9lcyBub3QgZXhpc3QgYW5kIGlzIG5vdCBhcHBsaWVkIGZvciBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuXHJcbiAgICBFUlJPUl9QRVJNSVNTSU9OX05PVF9FWElTVCA9IFwiNjAwNFwiLFxyXG5cclxuICAgIC8vIEludGVyZmFjZSBhdXRoZW50aWNhdGlvbjogdW5hdXRob3JpemVkLlxyXG4gICAgRVJST1JfUEVSTUlTU0lPTl9OT1RfQVVUSE9SSVpFRCA9IFwiNjAwNVwiLFxyXG5cclxuICAgIC8vIEludGVyZmFjZSBhdXRoZW50aWNhdGlvbjogVGhlIGF1dGhvcml6YXRpb24gZXhwaXJlcy5cclxuICAgIEVSUk9SX1BFUk1JU1NJT05fRVhQSVJFRCA9IFwiNjAwNlwiLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBBdHRyIHtcclxuICAgIGlkID0gXCJpZFwiLFxyXG4gICAgbWVzc2FnZSA9IFwibWVzc2FnZVwiLFxyXG4gICAgZmlyZURhdGUgPSBcImZpcmVEYXRlXCIsXHJcbiAgICB0aXRsZSA9IFwidGl0bGVcIixcclxuICAgIHRpY2tlciA9IFwidGlja2VyXCIsXHJcbiAgICBzaG93V2hlbiA9IFwic2hvd1doZW5cIixcclxuICAgIGF1dG9DYW5jZWwgPSBcImF1dG9DYW5jZWxcIixcclxuICAgIGxhcmdlSWNvbiA9IFwibGFyZ2VJY29uXCIsXHJcbiAgICBsYXJnZUljb25VcmwgPSBcImxhcmdlSWNvblVybFwiLFxyXG4gICAgc21hbGxJY29uID0gXCJzbWFsbEljb25cIixcclxuICAgIGJpZ1RleHQgPSBcImJpZ1RleHRcIixcclxuICAgIHN1YlRleHQgPSBcInN1YlRleHRcIixcclxuICAgIGJpZ1BpY3R1cmVVcmwgPSBcImJpZ1BpY3R1cmVVcmxcIixcclxuICAgIHNob3J0Y3V0SWQgPSBcInNob3J0Y3V0SWRcIixcclxuICAgIG51bWJlciA9IFwibnVtYmVyXCIsXHJcbiAgICBjaGFubmVsSWQgPSBcImNoYW5uZWxJZFwiLFxyXG4gICAgY2hhbm5lbE5hbWUgPSBcImNoYW5uZWxOYW1lXCIsXHJcbiAgICBjaGFubmVsRGVzY3JpcHRpb24gPSBcImNoYW5uZWxEZXNjcmlwdGlvblwiLFxyXG4gICAgY29sb3IgPSBcImNvbG9yXCIsXHJcbiAgICBncm91cCA9IFwiZ3JvdXBcIixcclxuICAgIGdyb3VwU3VtbWFyeSA9IFwiZ3JvdXBTdW1tYXJ5XCIsXHJcbiAgICBwbGF5U291bmQgPSBcInBsYXlTb3VuZFwiLFxyXG4gICAgc291bmROYW1lID0gXCJzb3VuZE5hbWVcIixcclxuICAgIHZpYnJhdGUgPSBcInZpYnJhdGVcIixcclxuICAgIHZpYnJhdGVEdXJhdGlvbiA9IFwidmlicmF0ZUR1cmF0aW9uXCIsXHJcbiAgICBhY3Rpb25zID0gXCJhY3Rpb25zXCIsXHJcbiAgICBpbnZva2VBcHAgPSBcImludm9rZUFwcFwiLFxyXG4gICAgdGFnID0gXCJ0YWdcIixcclxuICAgIHJlcGVhdFR5cGUgPSBcInJlcGVhdFR5cGVcIixcclxuICAgIHJlcGVhdFRpbWUgPSBcInJlcGVhdFRpbWVcIixcclxuICAgIG9uZ29pbmcgPSBcIm9uZ29pbmdcIixcclxuICAgIGFsbG93V2hpbGVJZGxlID0gXCJhbGxvd1doaWxlSWRsZVwiLFxyXG4gICAgZG9udE5vdGlmeUluRm9yZWdyb3VuZCA9IFwiZG9udE5vdGlmeUluRm9yZWdyb3VuZFwiLFxyXG4gICAgcHJpb3JpdHkgPSBcInByaW9yaXR5XCIsXHJcbiAgICBpbXBvcnRhbmNlID0gXCJpbXBvcnRhbmNlXCIsXHJcbiAgICB2aXNpYmlsaXR5ID0gXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICBkYXRhID0gXCJkYXRhXCIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEltcG9ydGFuY2Uge1xyXG4gICAgTUFYID0gXCJtYXhcIixcclxuICAgIEhJR0ggPSBcImhpZ2hcIixcclxuICAgIERFRkFVTFQgPSBcImRlZmF1bHRcIixcclxuICAgIExPVyA9IFwibG93XCIsXHJcbiAgICBNSU4gPSBcIm1pblwiLFxyXG4gICAgTk9ORSA9IFwibm9uZVwiLFxyXG4gICAgVU5TUEVDSUZJRUQgPSBcInVuc3BlY2lmaWVkXCIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFByaW9yaXR5IHtcclxuICAgIE1BWCA9IFwibWF4XCIsXHJcbiAgICBISUdIID0gXCJoaWdoXCIsXHJcbiAgICBERUZBVUxUID0gXCJkZWZhdWx0XCIsXHJcbiAgICBMT1cgPSBcImxvd1wiLFxyXG4gICAgTUlOID0gXCJtaW5cIixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUmVwZWF0VHlwZSB7XHJcbiAgICBIT1VSID0gXCJob3VyXCIsXHJcbiAgICBNSU5VVEUgPSBcIm1pbnV0ZVwiLFxyXG4gICAgREFZID0gXCJkYXlcIixcclxuICAgIFdFRUsgPSBcIndlZWtcIixcclxuICAgIENVU1RPTV9USU1FID0gXCJjdXN0b21fdGltZVwiLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBWaXNpYmlsaXR5IHtcclxuICAgIFBVQkxJQyA9IFwicHVibGljXCIsXHJcbiAgICBTRUNSRVQgPSBcInNlY3JldFwiLFxyXG4gICAgUFJJVkFURSA9IFwicHJpdmF0ZVwiLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZW1vdGVNZXNzYWdlQnVpbGRlciB7XHJcbiAgICBUTyA9IFwidG9cIixcclxuICAgIE1FU1NBR0VfSUQgPSBcIm1lc3NhZ2VJZFwiLFxyXG4gICAgTUVTU0FHRV9UWVBFID0gXCJtZXNzYWdlVHlwZVwiLFxyXG4gICAgVFRMID0gXCJ0dGxcIixcclxuICAgIENPTExBUFNFX0tFWSA9IFwiY29sbGFwc2VLZXlcIixcclxuICAgIFJFQ0VJUFRfTU9ERSA9IFwicmVjZWlwdE1vZGVcIixcclxuICAgIFNFTkRfTU9ERSA9IFwic2VuZE1vZGVcIixcclxuICAgIERBVEEgPSBcImRhdGFcIixcclxufVxyXG5cclxuY2xhc3MgQ29yZG92YVJlbW90ZU1lc3NhZ2Uge1xyXG4gICAgc3RhdGljIElOU1RBTkNFX0lEX1NDT1BFID0gXCJIQ01cIjtcclxuXHJcbiAgICBzdGF0aWMgUFJJT1JJVFlfVU5LTk9XTiA9IDA7XHJcbiAgICBzdGF0aWMgUFJJT1JJVFlfSElHSCA9IDE7XHJcbiAgICBzdGF0aWMgUFJJT1JJVFlfTk9STUFMID0gMjtcclxuXHJcbiAgICBzdGF0aWMgQ09MTEFQU0VLRVkgPSBcImNvbGxhcHNlS2V5XCI7XHJcbiAgICBzdGF0aWMgREFUQSA9IFwiZGF0YVwiO1xyXG4gICAgc3RhdGljIERBVEFPRk1BUCA9IFwiZGF0YU9mTWFwXCI7XHJcbiAgICBzdGF0aWMgTUVTU0FHRUlEID0gXCJtZXNzYWdlSWRcIjtcclxuICAgIHN0YXRpYyBNRVNTQUdFVFlQRSA9IFwibWVzc2FnZVR5cGVcIjtcclxuICAgIHN0YXRpYyBPUklHSU5BTFVSR0VOQ1kgPSBcIm9yaWdpbmFsVXJnZW5jeVwiO1xyXG4gICAgc3RhdGljIFVSR0VOQ1kgPSBcInVyZ2VuY3lcIjtcclxuICAgIHN0YXRpYyBUVEwgPSBcInR0bFwiO1xyXG4gICAgc3RhdGljIFNFTlRUSU1FID0gXCJzZW50VGltZVwiO1xyXG4gICAgc3RhdGljIFRPID0gXCJ0b1wiO1xyXG4gICAgc3RhdGljIEZST00gPSBcImZyb21cIjtcclxuICAgIHN0YXRpYyBUT0tFTiA9IFwidG9rZW5cIjtcclxuICAgIHN0YXRpYyBBTkFMWVRJQ0lORk8gPSBcImFuYWx5dGljSW5mb1wiO1xyXG4gICAgc3RhdGljIEFOQUxZVElDSU5GT01BUCA9IFwiYW5hbHl0aWNJbmZvTWFwXCI7XHJcblxyXG4gICAgc3RhdGljIE5PVElGSUNBVElPTiA9IHtcclxuICAgICAgICBUSVRMRTogXCJ0aXRsZVwiLFxyXG4gICAgICAgIFRJVExFTE9DQUxJWkFUSU9OS0VZOiBcInRpdGxlTG9jYWxpemF0aW9uS2V5XCIsXHJcbiAgICAgICAgVElUTEVMT0NBTElaQVRJT05BUkdTOiBcInRpdGxlTG9jYWxpemF0aW9uQXJnc1wiLFxyXG4gICAgICAgIEJPRFlMT0NBTElaQVRJT05LRVk6IFwiYm9keUxvY2FsaXphdGlvbktleVwiLFxyXG4gICAgICAgIEJPRFlMT0NBTElaQVRJT05BUkdTOiBcImJvZHlMb2NhbGl6YXRpb25BcmdzXCIsXHJcbiAgICAgICAgQk9EWTogXCJib2R5XCIsXHJcbiAgICAgICAgSUNPTjogXCJpY29uXCIsXHJcbiAgICAgICAgU09VTkQ6IFwiU291bmRcIixcclxuICAgICAgICBUQUc6IFwiVGFnXCIsXHJcbiAgICAgICAgQ09MT1I6IFwiQ29sb3JcIixcclxuICAgICAgICBDTElDS0FDVElPTjogXCJDbGlja0FjdGlvblwiLFxyXG4gICAgICAgIENIQU5ORUxJRDogXCJDaGFubmVsSWRcIixcclxuICAgICAgICBJTUFHRVVSTDogXCJJbWFnZVVybFwiLFxyXG4gICAgICAgIExJTks6IFwiTGlua1wiLFxyXG4gICAgICAgIE5PVElGWUlEOiBcIk5vdGlmeUlkXCIsXHJcbiAgICAgICAgV0hFTjogXCJXaGVuXCIsXHJcbiAgICAgICAgTElHSFRTRVRUSU5HUzogXCJMaWdodFNldHRpbmdzXCIsXHJcbiAgICAgICAgQkFER0VOVU1CRVI6IFwiQmFkZ2VOdW1iZXJcIixcclxuICAgICAgICBJTVBPUlRBTkNFOiBcIkltcG9ydGFuY2VcIixcclxuICAgICAgICBUSUNLRVI6IFwiVGlja2VyXCIsXHJcbiAgICAgICAgVklCUkFURUNPTkZJRzogXCJ2aWJyYXRlQ29uZmlnXCIsXHJcbiAgICAgICAgVklTSUJJTElUWTogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgSU5URU5UVVJJOiBcImludGVudFVyaVwiLFxyXG4gICAgICAgIElTQVVUT0NBTkNFTDogXCJpc0F1dG9DYW5jZWxcIixcclxuICAgICAgICBJU0xPQ0FMT05MWTogXCJpc0xvY2FsT25seVwiLFxyXG4gICAgICAgIElTREVGQVVMVExJR0hUOiBcImlzRGVmYXVsdExpZ2h0XCIsXHJcbiAgICAgICAgSVNERUZBVUxUU09VTkQ6IFwiaXNEZWZhdWx0U291bmRcIixcclxuICAgICAgICBJU0RFRkFVTFRWSUJSQVRFOiBcImlzRGVmYXVsdFZpYnJhdGVcIixcclxuICAgIH07XHJcbiAgICByZW1vdGVNc2c6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0aGlzLnJlbW90ZU1zZyA9IG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIHBhcnNlIGFsbCBlbGVtZW50LHVub3JkZXJlZFxyXG4gICAgICovXHJcbiAgICBwYXJzZU1zZ0FsbEF0dHJpYnV0ZSgpIHtcclxuICAgICAgICBsZXQgcHVzaFJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZW1vdGVNc2cpIHtcclxuICAgICAgICAgICAgcHVzaFJlc3VsdCA9IHB1c2hSZXN1bHQgKyBrZXkgKyBcIiA6IFwiICsgdGhpcy5yZW1vdGVNc2dba2V5XSArIFwiXFxuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwdXNoUmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRDb2xsYXBzZUtleSgpIE9idGFpbnMgdGhlIGNsYXNzaWZpY2F0aW9uIGlkZW50aWZpZXIgKGNvbGxhcHNlIGtleSkgb2YgYSBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBnZXRDb2xsYXBzZUtleSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuQ09MTEFQU0VLRVldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXREYXRhKCkgT2J0YWlucyB2YWxpZCBjb250ZW50IGRhdGEgb2YgYSBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBnZXREYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5EQVRBXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0RGF0YU9mTWFwKCkgYSBtZXNzYWdlIG1hcC5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YU9mTWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5EQVRBT0ZNQVBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRNZXNzYWdlSWQoKSBPYnRhaW5zIHRoZSBJRCBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldE1lc3NhZ2VJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTUVTU0FHRUlEXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0TWVzc2FnZVR5cGUoKSBPYnRhaW5zIHRoZSB0eXBlIG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TWVzc2FnZVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk1FU1NBR0VUWVBFXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0T3JpZ2luYWxVcmdlbmN5KCkgT2J0YWlucyB0aGUgb3JpZ2luYWwgcHJpb3JpdHkgb2YgYSBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBnZXRPcmlnaW5hbFVyZ2VuY3koKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk9SSUdJTkFMVVJHRU5DWV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldFVyZ2VuY3koKSBPYnRhaW5zIHByaW9yaXR5IG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VXJnZW5jeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuVVJHRU5DWV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldFR0bCgpIE9idGFpbnMgdmFsaWQgZ2V0VHRsIG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VHRsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UVExdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRTZW50VGltZSgpIE9idGFpbnMgdGhlIHRpbWUgd2hlbiBhIG1lc3NhZ2UgaXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldFNlbnRUaW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5TRU5UVElNRV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldFRvKCkgT2J0YWlucyB0aGUgcmVjaXBpZW50IG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0VG8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLlRPXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0RnJvbSgpIE9idGFpbnMgdGhlIHNlbmRlciBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldEZyb20oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLkZST01dO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRUb2tlbigpIE9idGFpbnMgdmFsaWQgdG9rZW5cclxuICAgICAqL1xyXG4gICAgZ2V0VG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLlRPS0VOXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbmFseXRpY0luZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLkFOQUxZVElDSU5GT107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QW5hbHl0aWNJbmZvTWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5BTkFMWVRJQ0lORk9NQVBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGl0bGUoKSBPYnRhaW5zIHRoZSB0aXRsZSBvZiBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0Tm90aWZpY2F0aW9uVGl0bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5USVRMRV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRUaXRsZUxvY2FsaXphdGlvbktleSgpIE9idGFpbnMgdGhlIGtleSBvZiB0aGUgZGlzcGxheWVkIHRpdGxlIG9mIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0VGl0bGVMb2NhbGl6YXRpb25LZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xyXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVMT0NBTElaQVRJT05LRVlcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGl0bGVMb2NhbGl6YXRpb25BcmdzKCkgT2J0YWlucyB2YXJpYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXNwbGF5ZWQgdGl0bGUgb2YgYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldFRpdGxlTG9jYWxpemF0aW9uQXJncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXHJcbiAgICAgICAgICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5USVRMRUxPQ0FMSVpBVElPTkFSR1NcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Qm9keUxvY2FsaXphdGlvbktleSgpIE9idGFpbnMgdGhlIGtleSBvZiB0aGUgZGlzcGxheWVkIGNvbnRlbnQgb2YgYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldEJvZHlMb2NhbGl6YXRpb25LZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xyXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQk9EWUxPQ0FMSVpBVElPTktFWVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCb2R5TG9jYWxpemF0aW9uQXJncygpIE9idGFpbnMgdmFyaWFibGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzcGxheWVkIGNvbnRlbnQgb2YgYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldEJvZHlMb2NhbGl6YXRpb25BcmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tcclxuICAgICAgICAgICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJPRFlMT0NBTElaQVRJT05BUkdTXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEJvZHkoKSBPYnRhaW5zIHRoZSBib2R5IG9mIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRCb2R5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQk9EWV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJY29uKCkgT2J0YWlucyB0aGUgaWNvbiBvZiBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0SWNvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklDT05dO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0U291bmQoKSBPYnRhaW5zIHRoZSBzb3VuZCBmcm9tIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRTb3VuZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlNPVU5EXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRhZygpIE9idGFpbnMgdGhlIHRhZyBmcm9tIGEgbWVzc2FnZSBmb3IgbWVzc2FnZSBvdmVyd3JpdGluZ1xyXG4gICAgICovXHJcbiAgICBnZXRUYWcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5UQUddO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q29sb3IoKSBPYnRhaW5zIHRoZSBjb2xvcnMgb2YgaWNvbnMgaW4gYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldENvbG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQ09MT1JdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q2xpY2tBY3Rpb24oKSBPYnRhaW5zIGFjdGlvbnMgdHJpZ2dlcmVkIGJ5IG1lc3NhZ2UgdGFwcGluZ1xyXG4gICAgICovXHJcbiAgICBnZXRDbGlja0FjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkNMSUNLQUNUSU9OXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldENoYW5uZWxJZCgpIE9idGFpbnMgSURzIG9mIGNoYW5uZWxzIHRoYXQgc3VwcG9ydCB0aGUgZGlzcGxheSBvZiBtZXNzYWdlc1xyXG4gICAgICovXHJcbiAgICBnZXRDaGFubmVsSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5DSEFOTkVMSURdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW1hZ2VVcmwoKSBPYnRhaW5zIHRoZSBpbWFnZSBVUkwgZnJvbSBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0SW1hZ2VVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JTUFHRVVSTF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRMaW5rKCkgT2J0YWlucyB0aGUgVVJMIHRvIGJlIGFjY2Vzc2VkIGZyb20gYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldExpbmsoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5MSU5LXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldE5vdGlmeUlkKCkgT2J0YWlucyB0aGUgdW5pcXVlIElEIG9mIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXROb3RpZnlJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLk5PVElGWUlEXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFdoZW4oKVxyXG4gICAgICovXHJcbiAgICBnZXRXaGVuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uV0hFTl07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRMaWdodFNldHRpbmdzKClcclxuICAgICAqL1xyXG4gICAgZ2V0TGlnaHRTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkxJR0hUU0VUVElOR1NdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0QmFkZ2VOdW1iZXIoKVxyXG4gICAgICovXHJcbiAgICBnZXRCYWRnZU51bWJlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJBREdFTlVNQkVSXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEltcG9ydGFuY2UoKVxyXG4gICAgICovXHJcbiAgICBnZXRJbXBvcnRhbmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU1QT1JUQU5DRV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRUaWNrZXIoKVxyXG4gICAgICovXHJcbiAgICBnZXRUaWNrZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5USUNLRVJdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VmlicmF0ZUNvbmZpZygpXHJcbiAgICAgKi9cclxuICAgIGdldFZpYnJhdGVDb25maWcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5WSUJSQVRFQ09ORklHXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFZpc2liaWxpdHkoKVxyXG4gICAgICovXHJcbiAgICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVklTSUJJTElUWV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJbnRlbnRVcmkoKVxyXG4gICAgICovXHJcbiAgICBnZXRJbnRlbnRVcmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JTlRFTlRVUkldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246aXNBdXRvQ2FuY2VsKClcclxuICAgICAqL1xyXG4gICAgaXNBdXRvQ2FuY2VsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNBVVRPQ0FOQ0VMXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEludGVudFVyaSgpXHJcbiAgICAgKi9cclxuICAgIGlzTG9jYWxPbmx5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNMT0NBTE9OTFldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246aXNEZWZhdWx0TGlnaHQoKVxyXG4gICAgICovXHJcbiAgICBpc0RlZmF1bHRMaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklTREVGQVVMVExJR0hUXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmlzRGVmYXVsdFNvdW5kKClcclxuICAgICAqL1xyXG4gICAgaXNEZWZhdWx0U291bmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0RFRkFVTFRTT1VORF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjppc0RlZmF1bHRWaWJyYXRlKClcclxuICAgICAqL1xyXG4gICAgaXNEZWZhdWx0VmlicmF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXHJcbiAgICAgICAgICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0RFRkFVTFRWSUJSQVRFXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxufVxyXG5cclxudHlwZSBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdCA9IHtcclxuICAgIFtrZXkgaW4gQXR0cl0/OiBhbnk7XHJcbn07XHJcblxyXG50eXBlIFJlbW90ZU1lc3NhZ2VPYmplY3QgPSB7XHJcbiAgICBba2V5IGluIFJlbW90ZU1lc3NhZ2VCdWlsZGVyXT86IGFueTtcclxufTtcclxuXHJcbmludGVyZmFjZSBJZFRhZyB7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgdGFnOiBzdHJpbmc7XHJcbn1cclxuIl19
\ No newline at end of file
diff --git a/cordova-plugin-hms-push/ionic-native/dist/ngx/bundle.js b/cordova-plugin-hms-push/ionic-native/dist/ngx/bundle.js
new file mode 100644
index 00000000..1688970b
--- /dev/null
+++ b/cordova-plugin-hms-push/ionic-native/dist/ngx/bundle.js
@@ -0,0 +1,849 @@
+/*
+ Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License")
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+'use strict';
+
+var tslib = require('tslib');
+var i0 = require('@angular/core');
+var core = require('@awesome-cordova-plugins/core');
+
+function _interopNamespaceDefault(e) {
+ var n = Object.create(null);
+ if (e) {
+ Object.keys(e).forEach(function (k) {
+ if (k !== 'default') {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function () { return e[k]; }
+ });
+ }
+ });
+ }
+ n.default = e;
+ return Object.freeze(n);
+}
+
+var i0__namespace = /*#__PURE__*/_interopNamespaceDefault(i0);
+
+var HmsPush = /** @class */ (function (_super) {
+ tslib.__extends(HmsPush, _super);
+ function HmsPush() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.HmsPushResultCode = exports.HmsPushResultCode;
+ _this.CordovaRemoteMessage = CordovaRemoteMessage;
+ _this.RemoteMessageBuilder = exports.RemoteMessageBuilder;
+ _this.DEFAULT_TOKEN_SCOPE = "HCM";
+ return _this;
+ }
+ /**
+ * This method initialized HmsPush.
+ * @returns Promise
+ */
+ HmsPush.prototype.init = function () { return core.cordova(this, "init", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.enableLogger = function () { return core.cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.disableLogger = function () { return core.cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to disable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ HmsPush.prototype.turnOnPush = function () { return core.cordova(this, "turnOnPush", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to enable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ HmsPush.prototype.turnOffPush = function () { return core.cordova(this, "turnOffPush", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to obtain an AAID in synchronous mode. Before applying for a token, an app calls this method to obtain its unique AAID. The HUAWEI Push server generates a token for the app based on the AAID. If the AAID of the app changes, a new token will be generated next time when the app applies for a token. If an app needs to report statistics events, it must carry the AAID as its unique ID.
+ * @returns Promise
+ */
+ HmsPush.prototype.getId = function () { return core.cordova(this, "getId", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to obtain an AAID in asynchronous mode.
+ * @returns Promise
+ */
+ HmsPush.prototype.getAAID = function () { return core.cordova(this, "getAAID", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to obtain a token required for accessing HUAWEI Push Kit. If there is no local AAID, this method will automatically generate an AAID when it is called because the HUAWEI Push Kit server needs to generate a token based on the AAID.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ HmsPush.prototype.getToken = function (scope) { return core.cordova(this, "getToken", { "otherPromise": true }, arguments); };
+ /**
+ * Obtains a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ HmsPush.prototype.getTokenWithSubjectId = function (subjectId) { return core.cordova(this, "getTokenWithSubjectId", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to obtain the generation timestamp of an AAID.
+ * @returns Promise
+ */
+ HmsPush.prototype.getCreationTime = function () { return core.cordova(this, "getCreationTime", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to delete a local AAID and its generation timestamp.
+ * @returns Promise
+ */
+ HmsPush.prototype.deleteAAID = function () { return core.cordova(this, "deleteAAID", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to delete a token. After a token is deleted, the corresponding AAID will not be deleted. This method is a synchronous method.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ HmsPush.prototype.deleteToken = function (scope) { return core.cordova(this, "deleteToken", { "otherPromise": true }, arguments); };
+ /**
+ * Deletes a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ HmsPush.prototype.deleteTokenWithSubjectId = function (subjectId) { return core.cordova(this, "deleteTokenWithSubjectId", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to subscribe to topics in asynchronous mode. The HUAWEI Push Kit topic messaging function allows you to send messages to multiple devices whose users have subscribed to a specific topic. You can write messages about the topic as required, and HUAWEI Push Kit determines the release path and sends messages to the correct devices in a reliable manner.
+ * @param {string} topic Topic to be subscribed to.
+ * @returns Promise
+ */
+ HmsPush.prototype.subscribe = function (topic) { return core.cordova(this, "subscribe", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to unsubscribe from topics that are subscribed to through the subscribe method.
+ * @param {string} topic Topic to be unsubscribed to.
+ * @returns Promise
+ */
+ HmsPush.prototype.unsubscribe = function (topic) { return core.cordova(this, "unsubscribe", { "otherPromise": true }, arguments); };
+ /**
+ * Sets whether to enable automatic initialization. If the enable parameter is set to true, the SDK automatically generates an AAID and applies for a token.
+ * @returns Promise
+ * @param {boolean} enabled Indicates whether to enable automatic initialization.
+ */
+ HmsPush.prototype.setAutoInitEnabled = function (enabled) { return core.cordova(this, "setAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getOdid = function () { return core.cordova(this, "getOdid", { "otherPromise": true }, arguments); };
+ /**
+ * This method is used to check whether automatic initialization is enabled.
+ * @returns Promise
+ */
+ HmsPush.prototype.isAutoInitEnabled = function () { return core.cordova(this, "isAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getInitialNotification = function () { return core.cordova(this, "getInitialNotification", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.sendRemoteMessage = function (remoteMessage) { return core.cordova(this, "sendRemoteMessage", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.setBackgroundFile = function (filePath) { return core.cordova(this, "setBackgroundFile", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.setItem = function (key, value) { return core.cordova(this, "setItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getItem = function (key) { return core.cordova(this, "getItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.removeItem = function (key) { return core.cordova(this, "removeItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.removeBackgroundFile = function () { return core.cordova(this, "removeBackgroundFile", { "otherPromise": true }, arguments); };
+ HmsPush.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPush, deps: null, target: i0__namespace.ɵɵFactoryTarget.Injectable });
+ HmsPush.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPush });
+ HmsPush.pluginName = "HmsPush";
+ HmsPush.plugin = "@hmscore/cordova-plugin-hms-push";
+ HmsPush.pluginRef = "HmsPush";
+ HmsPush.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsPush.platforms = ["Android"];
+ HmsPush = tslib.__decorate([], HmsPush);
+ return HmsPush;
+}(core.AwesomeCordovaNativePlugin));
+i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPush, decorators: [{
+ type: i0.Injectable
+ }], propDecorators: {
+ /**
+ * This method initialized HmsPush.
+ * @returns Promise
+ */
+ init: [], enableLogger: [], disableLogger: [],
+ /**
+ * This method is used to disable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ turnOnPush: [],
+ /**
+ * This method is used to enable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ turnOffPush: [],
+ /**
+ * This method is used to obtain an AAID in synchronous mode. Before applying for a token, an app calls this method to obtain its unique AAID. The HUAWEI Push server generates a token for the app based on the AAID. If the AAID of the app changes, a new token will be generated next time when the app applies for a token. If an app needs to report statistics events, it must carry the AAID as its unique ID.
+ * @returns Promise
+ */
+ getId: [],
+ /**
+ * This method is used to obtain an AAID in asynchronous mode.
+ * @returns Promise
+ */
+ getAAID: [],
+ /**
+ * This method is used to obtain a token required for accessing HUAWEI Push Kit. If there is no local AAID, this method will automatically generate an AAID when it is called because the HUAWEI Push Kit server needs to generate a token based on the AAID.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ getToken: [],
+ /**
+ * Obtains a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ getTokenWithSubjectId: [],
+ /**
+ * This method is used to obtain the generation timestamp of an AAID.
+ * @returns Promise
+ */
+ getCreationTime: [],
+ /**
+ * This method is used to delete a local AAID and its generation timestamp.
+ * @returns Promise
+ */
+ deleteAAID: [],
+ /**
+ * This method is used to delete a token. After a token is deleted, the corresponding AAID will not be deleted. This method is a synchronous method.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ deleteToken: [],
+ /**
+ * Deletes a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ deleteTokenWithSubjectId: [],
+ /**
+ * This method is used to subscribe to topics in asynchronous mode. The HUAWEI Push Kit topic messaging function allows you to send messages to multiple devices whose users have subscribed to a specific topic. You can write messages about the topic as required, and HUAWEI Push Kit determines the release path and sends messages to the correct devices in a reliable manner.
+ * @param {string} topic Topic to be subscribed to.
+ * @returns Promise
+ */
+ subscribe: [],
+ /**
+ * This method is used to unsubscribe from topics that are subscribed to through the subscribe method.
+ * @param {string} topic Topic to be unsubscribed to.
+ * @returns Promise
+ */
+ unsubscribe: [],
+ /**
+ * Sets whether to enable automatic initialization. If the enable parameter is set to true, the SDK automatically generates an AAID and applies for a token.
+ * @returns Promise
+ * @param {boolean} enabled Indicates whether to enable automatic initialization.
+ */
+ setAutoInitEnabled: [], getOdid: [],
+ /**
+ * This method is used to check whether automatic initialization is enabled.
+ * @returns Promise
+ */
+ isAutoInitEnabled: [], getInitialNotification: [], sendRemoteMessage: [], setBackgroundFile: [], setItem: [], getItem: [], removeItem: [], removeBackgroundFile: [] } });
+var HmsLocalNotification = /** @class */ (function (_super) {
+ tslib.__extends(HmsLocalNotification, _super);
+ function HmsLocalNotification() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.Attr = exports.Attr;
+ _this.Importance = exports.Importance;
+ _this.Priority = exports.Priority;
+ _this.RepeatType = exports.RepeatType;
+ _this.Visibility = exports.Visibility;
+ return _this;
+ }
+ HmsLocalNotification.prototype.localNotification = function (localNotification) { return core.cordova(this, "localNotification", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.localNotificationSchedule = function (localNotification) { return core.cordova(this, "localNotificationSchedule", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelAllNotifications = function () { return core.cordova(this, "cancelAllNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotifications = function () { return core.cordova(this, "cancelNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelScheduledNotifications = function () { return core.cordova(this, "cancelScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithId = function (id) { return core.cordova(this, "cancelNotificationsWithId", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithIdTag = function (idTag) { return core.cordova(this, "cancelNotificationsWithIdTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithTag = function (tag) { return core.cordova(this, "cancelNotificationsWithTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getNotifications = function () { return core.cordova(this, "getNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getScheduledNotifications = function () { return core.cordova(this, "getScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getChannels = function () { return core.cordova(this, "getChannels", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.channelExists = function (channelId) { return core.cordova(this, "channelExists", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.channelBlocked = function (channelId) { return core.cordova(this, "channelBlocked", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.deleteChannel = function (channelId) { return core.cordova(this, "deleteChannel", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsLocalNotification, deps: null, target: i0__namespace.ɵɵFactoryTarget.Injectable });
+ HmsLocalNotification.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsLocalNotification });
+ HmsLocalNotification.pluginName = "HmsLocalNotification";
+ HmsLocalNotification.plugin = "@hmscore/cordova-plugin-hms-push";
+ HmsLocalNotification.pluginRef = "HmsLocalNotification";
+ HmsLocalNotification.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsLocalNotification.platforms = ["Android"];
+ HmsLocalNotification = tslib.__decorate([], HmsLocalNotification);
+ return HmsLocalNotification;
+}(core.AwesomeCordovaNativePlugin));
+i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsLocalNotification, decorators: [{
+ type: i0.Injectable
+ }], propDecorators: { localNotification: [], localNotificationSchedule: [], cancelAllNotifications: [], cancelNotifications: [], cancelScheduledNotifications: [], cancelNotificationsWithId: [], cancelNotificationsWithIdTag: [], cancelNotificationsWithTag: [], getNotifications: [], getScheduledNotifications: [], getChannels: [], channelExists: [], channelBlocked: [], deleteChannel: [] } });
+var HmsPushEvent = /** @class */ (function (_super) {
+ tslib.__extends(HmsPushEvent, _super);
+ function HmsPushEvent() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.REMOTE_DATA_MESSAGE_RECEIVED = "REMOTE_DATA_MESSAGE_RECEIVED";
+ _this.TOKEN_RECEIVED_EVENT = "TOKEN_RECEIVED_EVENT";
+ _this.ON_TOKEN_ERROR_EVENT = "ON_TOKEN_ERROR_EVENT";
+ _this.NOTIFICATION_OPENED_EVENT = "NOTIFICATION_OPENED_EVENT";
+ _this.LOCAL_NOTIFICATION_ACTION_EVENT = "LOCAL_NOTIFICATION_ACTION_EVENT";
+ _this.ON_PUSH_MESSAGE_SENT = "ON_PUSH_MESSAGE_SENT";
+ _this.ON_PUSH_MESSAGE_SENT_ERROR = "ON_PUSH_MESSAGE_SENT_ERROR";
+ _this.ON_PUSH_MESSAGE_SENT_DELIVERED = "ON_PUSH_MESSAGE_SENT_DELIVERED";
+ _this.ON_MULTI_SENDER_TOKEN_ERROR_EVENT = "ON_MULTI_SENDER_TOKEN_ERROR_EVENT";
+ _this.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT = "ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT";
+ return _this;
+ }
+ HmsPushEvent.prototype.onRemoteMessageReceived = function (callback) { return core.cordova(this, "onRemoteMessageReceived", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onTokenReceived = function (callback) { return core.cordova(this, "onTokenReceived", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onTokenError = function (callback) { return core.cordova(this, "onTokenError", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSent = function (callback) { return core.cordova(this, "onPushMessageSent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSentError = function (callback) { return core.cordova(this, "onPushMessageSentError", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSentDelivered = function (callback) { return core.cordova(this, "onPushMessageSentDelivered", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onLocalNotificationAction = function (callback) { return core.cordova(this, "onLocalNotificationAction", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onNotificationOpenedApp = function (callback) { return core.cordova(this, "onNotificationOpenedApp", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onMultiSenderTokenReceivedEvent = function (callback) { return core.cordova(this, "onMultiSenderTokenReceivedEvent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onMultiSenderTokenErrorEvent = function (callback) { return core.cordova(this, "onMultiSenderTokenErrorEvent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushEvent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Injectable });
+ HmsPushEvent.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushEvent });
+ HmsPushEvent.pluginName = "HmsPushEvent";
+ HmsPushEvent.plugin = "@hmscore/cordova-plugin-hms-push";
+ HmsPushEvent.pluginRef = "HmsPushEvent";
+ HmsPushEvent.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsPushEvent.platforms = ["Android"];
+ HmsPushEvent = tslib.__decorate([], HmsPushEvent);
+ return HmsPushEvent;
+}(core.AwesomeCordovaNativePlugin));
+i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushEvent, decorators: [{
+ type: i0.Injectable
+ }], propDecorators: { onRemoteMessageReceived: [], onTokenReceived: [], onTokenError: [], onPushMessageSent: [], onPushMessageSentError: [], onPushMessageSentDelivered: [], onLocalNotificationAction: [], onNotificationOpenedApp: [], onMultiSenderTokenReceivedEvent: [], onMultiSenderTokenErrorEvent: [] } });
+var HmsPushProfile = /** @class */ (function (_super) {
+ tslib.__extends(HmsPushProfile, _super);
+ function HmsPushProfile() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.HUAWEI_PROFILE = 1;
+ _this.CUSTOM_PROFILE = 2;
+ _this.UNDEFINED_PROFILE = -1;
+ return _this;
+ }
+ /**
+ *
+ */
+ HmsPushProfile.prototype.isSupportProfile = function () { return core.cordova(this, "isSupportProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.addProfile = function (type, profileId) { return core.cordova(this, "addProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.addProfileWithSubjectId = function (subjectId, type, profileId) { return core.cordova(this, "addProfileWithSubjectId", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.deleteProfile = function (profileId) { return core.cordova(this, "deleteProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.deleteProfileWithSubjectId = function (subjectId, profileId) { return core.cordova(this, "deleteProfileWithSubjectId", { "otherPromise": true }, arguments); };
+ HmsPushProfile.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushProfile, deps: null, target: i0__namespace.ɵɵFactoryTarget.Injectable });
+ HmsPushProfile.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushProfile });
+ HmsPushProfile.pluginName = "HmsPushProfile";
+ HmsPushProfile.plugin = "@hmscore/cordova-plugin-hms-push";
+ HmsPushProfile.pluginRef = "HmsPushProfile";
+ HmsPushProfile.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsPushProfile.platforms = ["Android"];
+ HmsPushProfile = tslib.__decorate([], HmsPushProfile);
+ return HmsPushProfile;
+}(core.AwesomeCordovaNativePlugin));
+i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: HmsPushProfile, decorators: [{
+ type: i0.Injectable
+ }], propDecorators: {
+ /**
+ *
+ */
+ isSupportProfile: [], addProfile: [], addProfileWithSubjectId: [], deleteProfile: [], deleteProfileWithSubjectId: [] } });
+exports.HmsPushResultCode = void 0;
+(function (HmsPushResultCode) {
+ // Success
+ HmsPushResultCode["SUCCESS"] = "0";
+ // Error
+ HmsPushResultCode["ERROR"] = "-1";
+ // Bundle is null, exception
+ HmsPushResultCode["NULL_BUNDLE"] = "333";
+ // You do not have a token. Apply for a token.
+ HmsPushResultCode["ERROR_NO_TOKEN"] = "907122030";
+ // The current network is unavailable. Check the network connection.
+ HmsPushResultCode["ERROR_NO_NETWORK"] = "907122031";
+ // The token has expired. Delete the token and apply for a new one.
+ HmsPushResultCode["ERROR_TOKEN_INVALID"] = "907122032";
+ // If the Push service is unavailable, contact Huawei technical support.
+ HmsPushResultCode["ERROR_SERVICE_NOT_AVAILABLE"] = "907122046";
+ // If the Push server returns an error, contact Huawei technical support.
+ HmsPushResultCode["ERROR_PUSH_SERVER"] = "907122047";
+ // Unknown error. Contact Huawei technical support.
+ HmsPushResultCode["ERROR_UNKNOWN"] = "907122045";
+ // The number of subscribed topics exceeds 2000.
+ HmsPushResultCode["ERROR_TOPIC_EXCEED"] = "907122034";
+ // Failed to send the subscription topic. Contact Huawei technical support.
+ HmsPushResultCode["ERROR_TOPIC_SEND"] = "907122035";
+ // Push rights are not enabled. Enable the service and set push service parameters at AppGallery Connect.
+ HmsPushResultCode["ERROR_NO_RIGHT"] = "907122036";
+ // Failed to apply for the token. Contact Huawei technical support.
+ HmsPushResultCode["ERROR_GET_TOKEN_ERR"] = "907122037";
+ // No storage location is selected for the application or the storage location is invalid.
+ HmsPushResultCode["ERROR_STORAGE_LOCATION_EMPTY"] = "907122038";
+ // Failed to apply for a token. Cross-region token application is not allowed.
+ HmsPushResultCode["ERROR_NOT_ALLOW_CROSS_APPLY"] = "907122053";
+ // The message body size exceeds the maximum.
+ HmsPushResultCode["ERROR_SIZE"] = "907122041";
+ // The message contains invalid parameters.
+ HmsPushResultCode["ERROR_INVALID_PARAMETERS"] = "907122042";
+ // The number of sent messages reaches the upper limit. The messages will be discarded.
+ HmsPushResultCode["ERROR_TOO_MANY_MESSAGES"] = "907122043";
+ // The message lifetime expires before the message is successfully sent to the APP server.
+ HmsPushResultCode["ERROR_TTL_EXCEEDED"] = "907122044";
+ // Huawei Mobile Services (APK) can't connect Huawei Push Kit.
+ HmsPushResultCode["ERROR_HMS_CLIENT_API"] = "907122048";
+ // The current EMUI version is too early to use the capability.
+ HmsPushResultCode["ERROR_OPERATION_NOT_SUPPORTED"] = "907122049";
+ // The operation cannot be performed in the main thread.
+ HmsPushResultCode["ERROR_MAIN_THREAD"] = "907122050";
+ // The device certificate authentication fails.
+ HmsPushResultCode["ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING"] = "907122051";
+ // Failed to bind the service.
+ HmsPushResultCode["ERROR_BIND_SERVICE_SELF_MAPPING"] = "907122052";
+ // The SDK is being automatically initialized. Try again later.
+ HmsPushResultCode["ERROR_AUTO_INITIALIZING"] = "907122054";
+ /*The input parameter is incorrect. Check whether the related configuration information is correct.
+ * Example: app_id in the agconnect - services.json file;
+ * Check whether the build.gradle file is configured with the certificate signature.
+ */
+ HmsPushResultCode["ERROR_ARGUMENTS_INVALID"] = "907135000";
+ // Internal Push error. Contact Huawei technical support engineers.
+ HmsPushResultCode["ERROR_INTERNAL_ERROR"] = "907135001";
+ // The service does not exist. The invoked interface does not exist.
+ HmsPushResultCode["ERROR_NAMING_INVALID"] = "907135002";
+ // The ApiClient object is invalid.
+ HmsPushResultCode["ERROR_CLIENT_API_INVALID"] = "907135003";
+ // Invoking AIDL times out. Contact Huawei technical support.
+ HmsPushResultCode["ERROR_EXECUTE_TIMEOUT"] = "907135004";
+ // The current area does not support this service.
+ HmsPushResultCode["ERROR_NOT_IN_SERVICE"] = "907135005";
+ // If the AIDL connection session is invalid, contact Huawei technical support.
+ HmsPushResultCode["ERROR_SESSION_INVALID"] = "907135006";
+ // An error occurred when invoking an unspecified API.
+ HmsPushResultCode["ERROR_API_NOT_SPECIFIED"] = "1002";
+ /* Failed to invoke the gateway to query the application scope.
+ * Check whether the current app has been created and enabled in AppGallery Connect.
+ * If yes, contact Huawei technical support.
+ */
+ HmsPushResultCode["ERROR_GET_SCOPE_ERROR"] = "907135700";
+ /* Scope is not configured on the AppGallery Connect.
+ * Check whether the current app has been created and enabled in AppGallery Connect.
+ * If yes, contact Huawei technical support.
+ */
+ HmsPushResultCode["ERROR_SCOPE_LIST_EMPTY"] = "907135701";
+ /* The certificate fingerprint is not configured on the AppGallery Connect.
+ * 1. Check whether your phone can access the Internet.
+ * 2. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details, see AppGallery Connect configuration in Development Preparations.
+ * 3. If the check result is correct, contact Huawei technical support.
+ */
+ HmsPushResultCode["ERROR_CERT_FINGERPRINT_EMPTY"] = "907135702";
+ // Permission is not configured on the AppGallery Connect.
+ HmsPushResultCode["ERROR_PERMISSION_LIST_EMPTY"] = "907135703";
+ // The authentication information of the application does not exist.
+ HmsPushResultCode["ERROR_AUTH_INFO_NOT_EXIST"] = "6002";
+ // An error occurred during certificate fingerprint verification. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details, see AppGallery Connect configuration in Development Preparations.
+ HmsPushResultCode["ERROR_CERT_FINGERPRINT_ERROR"] = "6003";
+ // Interface authentication: The permission does not exist and is not applied for in AppGallery Connect.
+ HmsPushResultCode["ERROR_PERMISSION_NOT_EXIST"] = "6004";
+ // Interface authentication: unauthorized.
+ HmsPushResultCode["ERROR_PERMISSION_NOT_AUTHORIZED"] = "6005";
+ // Interface authentication: The authorization expires.
+ HmsPushResultCode["ERROR_PERMISSION_EXPIRED"] = "6006";
+})(exports.HmsPushResultCode || (exports.HmsPushResultCode = {}));
+exports.Attr = void 0;
+(function (Attr) {
+ Attr["id"] = "id";
+ Attr["message"] = "message";
+ Attr["fireDate"] = "fireDate";
+ Attr["title"] = "title";
+ Attr["ticker"] = "ticker";
+ Attr["showWhen"] = "showWhen";
+ Attr["autoCancel"] = "autoCancel";
+ Attr["largeIcon"] = "largeIcon";
+ Attr["largeIconUrl"] = "largeIconUrl";
+ Attr["smallIcon"] = "smallIcon";
+ Attr["bigText"] = "bigText";
+ Attr["subText"] = "subText";
+ Attr["bigPictureUrl"] = "bigPictureUrl";
+ Attr["shortcutId"] = "shortcutId";
+ Attr["number"] = "number";
+ Attr["channelId"] = "channelId";
+ Attr["channelName"] = "channelName";
+ Attr["channelDescription"] = "channelDescription";
+ Attr["color"] = "color";
+ Attr["group"] = "group";
+ Attr["groupSummary"] = "groupSummary";
+ Attr["playSound"] = "playSound";
+ Attr["soundName"] = "soundName";
+ Attr["vibrate"] = "vibrate";
+ Attr["vibrateDuration"] = "vibrateDuration";
+ Attr["actions"] = "actions";
+ Attr["invokeApp"] = "invokeApp";
+ Attr["tag"] = "tag";
+ Attr["repeatType"] = "repeatType";
+ Attr["repeatTime"] = "repeatTime";
+ Attr["ongoing"] = "ongoing";
+ Attr["allowWhileIdle"] = "allowWhileIdle";
+ Attr["dontNotifyInForeground"] = "dontNotifyInForeground";
+ Attr["priority"] = "priority";
+ Attr["importance"] = "importance";
+ Attr["visibility"] = "visibility";
+ Attr["data"] = "data";
+})(exports.Attr || (exports.Attr = {}));
+exports.Importance = void 0;
+(function (Importance) {
+ Importance["MAX"] = "max";
+ Importance["HIGH"] = "high";
+ Importance["DEFAULT"] = "default";
+ Importance["LOW"] = "low";
+ Importance["MIN"] = "min";
+ Importance["NONE"] = "none";
+ Importance["UNSPECIFIED"] = "unspecified";
+})(exports.Importance || (exports.Importance = {}));
+exports.Priority = void 0;
+(function (Priority) {
+ Priority["MAX"] = "max";
+ Priority["HIGH"] = "high";
+ Priority["DEFAULT"] = "default";
+ Priority["LOW"] = "low";
+ Priority["MIN"] = "min";
+})(exports.Priority || (exports.Priority = {}));
+exports.RepeatType = void 0;
+(function (RepeatType) {
+ RepeatType["HOUR"] = "hour";
+ RepeatType["MINUTE"] = "minute";
+ RepeatType["DAY"] = "day";
+ RepeatType["WEEK"] = "week";
+ RepeatType["CUSTOM_TIME"] = "custom_time";
+})(exports.RepeatType || (exports.RepeatType = {}));
+exports.Visibility = void 0;
+(function (Visibility) {
+ Visibility["PUBLIC"] = "public";
+ Visibility["SECRET"] = "secret";
+ Visibility["PRIVATE"] = "private";
+})(exports.Visibility || (exports.Visibility = {}));
+exports.RemoteMessageBuilder = void 0;
+(function (RemoteMessageBuilder) {
+ RemoteMessageBuilder["TO"] = "to";
+ RemoteMessageBuilder["MESSAGE_ID"] = "messageId";
+ RemoteMessageBuilder["MESSAGE_TYPE"] = "messageType";
+ RemoteMessageBuilder["TTL"] = "ttl";
+ RemoteMessageBuilder["COLLAPSE_KEY"] = "collapseKey";
+ RemoteMessageBuilder["RECEIPT_MODE"] = "receiptMode";
+ RemoteMessageBuilder["SEND_MODE"] = "sendMode";
+ RemoteMessageBuilder["DATA"] = "data";
+})(exports.RemoteMessageBuilder || (exports.RemoteMessageBuilder = {}));
+var CordovaRemoteMessage = /** @class */ (function () {
+ function CordovaRemoteMessage(options) {
+ if (options === void 0) { options = {}; }
+ this.remoteMsg = options;
+ }
+ /*
+ * parse all element,unordered
+ */
+ CordovaRemoteMessage.prototype.parseMsgAllAttribute = function () {
+ var pushResult = "";
+ for (var key in this.remoteMsg) {
+ pushResult = pushResult + key + " : " + this.remoteMsg[key] + "\n";
+ }
+ return pushResult;
+ };
+ /*
+ * getCollapseKey() Obtains the classification identifier (collapse key) of a message.
+ */
+ CordovaRemoteMessage.prototype.getCollapseKey = function () {
+ return this.remoteMsg[CordovaRemoteMessage.COLLAPSEKEY];
+ };
+ /*
+ * getData() Obtains valid content data of a message.
+ */
+ CordovaRemoteMessage.prototype.getData = function () {
+ return this.remoteMsg[CordovaRemoteMessage.DATA];
+ };
+ /*
+ * getDataOfMap() a message map.
+ */
+ CordovaRemoteMessage.prototype.getDataOfMap = function () {
+ return this.remoteMsg[CordovaRemoteMessage.DATAOFMAP];
+ };
+ /*
+ * getMessageId() Obtains the ID of a message.
+ */
+ CordovaRemoteMessage.prototype.getMessageId = function () {
+ return this.remoteMsg[CordovaRemoteMessage.MESSAGEID];
+ };
+ /*
+ * getMessageType() Obtains the type of a message.
+ */
+ CordovaRemoteMessage.prototype.getMessageType = function () {
+ return this.remoteMsg[CordovaRemoteMessage.MESSAGETYPE];
+ };
+ /*
+ * getOriginalUrgency() Obtains the original priority of a message.
+ */
+ CordovaRemoteMessage.prototype.getOriginalUrgency = function () {
+ return this.remoteMsg[CordovaRemoteMessage.ORIGINALURGENCY];
+ };
+ /*
+ * getUrgency() Obtains priority of a message.
+ */
+ CordovaRemoteMessage.prototype.getUrgency = function () {
+ return this.remoteMsg[CordovaRemoteMessage.URGENCY];
+ };
+ /*
+ * getTtl() Obtains valid getTtl of a message.
+ */
+ CordovaRemoteMessage.prototype.getTtl = function () {
+ return this.remoteMsg[CordovaRemoteMessage.TTL];
+ };
+ /*
+ * getSentTime() Obtains the time when a message is sent from the server.
+ */
+ CordovaRemoteMessage.prototype.getSentTime = function () {
+ return this.remoteMsg[CordovaRemoteMessage.SENTTIME];
+ };
+ /*
+ * getTo() Obtains the recipient of a message.
+ */
+ CordovaRemoteMessage.prototype.getTo = function () {
+ return this.remoteMsg[CordovaRemoteMessage.TO];
+ };
+ /*
+ * getFrom() Obtains the sender of a message.
+ */
+ CordovaRemoteMessage.prototype.getFrom = function () {
+ return this.remoteMsg[CordovaRemoteMessage.FROM];
+ };
+ /*
+ * getToken() Obtains valid token
+ */
+ CordovaRemoteMessage.prototype.getToken = function () {
+ return this.remoteMsg[CordovaRemoteMessage.TOKEN];
+ };
+ CordovaRemoteMessage.prototype.getAnalyticInfo = function () {
+ return this.remoteMsg[CordovaRemoteMessage.ANALYTICINFO];
+ };
+ CordovaRemoteMessage.prototype.getAnalyticInfoMap = function () {
+ return this.remoteMsg[CordovaRemoteMessage.ANALYTICINFOMAP];
+ };
+ /*
+ * Notification:getTitle() Obtains the title of a message
+ */
+ CordovaRemoteMessage.prototype.getNotificationTitle = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLE];
+ };
+ /*
+ * Notification:getTitleLocalizationKey() Obtains the key of the displayed title of a notification message
+ */
+ CordovaRemoteMessage.prototype.getTitleLocalizationKey = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY];
+ };
+ /*
+ * Notification:getTitleLocalizationArgs() Obtains variable parameters of the displayed title of a message
+ */
+ CordovaRemoteMessage.prototype.getTitleLocalizationArgs = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS];
+ };
+ /*
+ * Notification:getBodyLocalizationKey() Obtains the key of the displayed content of a message
+ */
+ CordovaRemoteMessage.prototype.getBodyLocalizationKey = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY];
+ };
+ /*
+ * Notification:getBodyLocalizationArgs() Obtains variable parameters of the displayed content of a message
+ */
+ CordovaRemoteMessage.prototype.getBodyLocalizationArgs = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS];
+ };
+ /*
+ * Notification:getBody() Obtains the body of a message
+ */
+ CordovaRemoteMessage.prototype.getBody = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODY];
+ };
+ /*
+ * Notification:getIcon() Obtains the icon of a message
+ */
+ CordovaRemoteMessage.prototype.getIcon = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ICON];
+ };
+ /*
+ * Notification:getSound() Obtains the sound from a message
+ */
+ CordovaRemoteMessage.prototype.getSound = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.SOUND];
+ };
+ /*
+ * Notification:getTag() Obtains the tag from a message for message overwriting
+ */
+ CordovaRemoteMessage.prototype.getTag = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TAG];
+ };
+ /*
+ * Notification:getColor() Obtains the colors of icons in a message
+ */
+ CordovaRemoteMessage.prototype.getColor = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.COLOR];
+ };
+ /*
+ * Notification:getClickAction() Obtains actions triggered by message tapping
+ */
+ CordovaRemoteMessage.prototype.getClickAction = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.CLICKACTION];
+ };
+ /*
+ * Notification:getChannelId() Obtains IDs of channels that support the display of messages
+ */
+ CordovaRemoteMessage.prototype.getChannelId = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.CHANNELID];
+ };
+ /*
+ * Notification:getImageUrl() Obtains the image URL from a message
+ */
+ CordovaRemoteMessage.prototype.getImageUrl = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.IMAGEURL];
+ };
+ /*
+ * Notification:getLink() Obtains the URL to be accessed from a message
+ */
+ CordovaRemoteMessage.prototype.getLink = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.LINK];
+ };
+ /*
+ * Notification:getNotifyId() Obtains the unique ID of a message
+ */
+ CordovaRemoteMessage.prototype.getNotifyId = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.NOTIFYID];
+ };
+ /*
+ * Notification:getWhen()
+ */
+ CordovaRemoteMessage.prototype.getWhen = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.WHEN];
+ };
+ /*
+ * Notification:getLightSettings()
+ */
+ CordovaRemoteMessage.prototype.getLightSettings = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.LIGHTSETTINGS];
+ };
+ /*
+ * Notification:getBadgeNumber()
+ */
+ CordovaRemoteMessage.prototype.getBadgeNumber = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BADGENUMBER];
+ };
+ /*
+ * Notification:getImportance()
+ */
+ CordovaRemoteMessage.prototype.getImportance = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.IMPORTANCE];
+ };
+ /*
+ * Notification:getTicker()
+ */
+ CordovaRemoteMessage.prototype.getTicker = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TICKER];
+ };
+ /*
+ * Notification:getVibrateConfig()
+ */
+ CordovaRemoteMessage.prototype.getVibrateConfig = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.VIBRATECONFIG];
+ };
+ /*
+ * Notification:getVisibility()
+ */
+ CordovaRemoteMessage.prototype.getVisibility = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.VISIBILITY];
+ };
+ /*
+ * Notification:getIntentUri()
+ */
+ CordovaRemoteMessage.prototype.getIntentUri = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.INTENTURI];
+ };
+ /*
+ * Notification:isAutoCancel()
+ */
+ CordovaRemoteMessage.prototype.isAutoCancel = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISAUTOCANCEL];
+ };
+ /*
+ * Notification:getIntentUri()
+ */
+ CordovaRemoteMessage.prototype.isLocalOnly = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISLOCALONLY];
+ };
+ /*
+ * Notification:isDefaultLight()
+ */
+ CordovaRemoteMessage.prototype.isDefaultLight = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISDEFAULTLIGHT];
+ };
+ /*
+ * Notification:isDefaultSound()
+ */
+ CordovaRemoteMessage.prototype.isDefaultSound = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISDEFAULTSOUND];
+ };
+ /*
+ * Notification:isDefaultVibrate()
+ */
+ CordovaRemoteMessage.prototype.isDefaultVibrate = function () {
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE];
+ };
+ CordovaRemoteMessage.INSTANCE_ID_SCOPE = "HCM";
+ CordovaRemoteMessage.PRIORITY_UNKNOWN = 0;
+ CordovaRemoteMessage.PRIORITY_HIGH = 1;
+ CordovaRemoteMessage.PRIORITY_NORMAL = 2;
+ CordovaRemoteMessage.COLLAPSEKEY = "collapseKey";
+ CordovaRemoteMessage.DATA = "data";
+ CordovaRemoteMessage.DATAOFMAP = "dataOfMap";
+ CordovaRemoteMessage.MESSAGEID = "messageId";
+ CordovaRemoteMessage.MESSAGETYPE = "messageType";
+ CordovaRemoteMessage.ORIGINALURGENCY = "originalUrgency";
+ CordovaRemoteMessage.URGENCY = "urgency";
+ CordovaRemoteMessage.TTL = "ttl";
+ CordovaRemoteMessage.SENTTIME = "sentTime";
+ CordovaRemoteMessage.TO = "to";
+ CordovaRemoteMessage.FROM = "from";
+ CordovaRemoteMessage.TOKEN = "token";
+ CordovaRemoteMessage.ANALYTICINFO = "analyticInfo";
+ CordovaRemoteMessage.ANALYTICINFOMAP = "analyticInfoMap";
+ CordovaRemoteMessage.NOTIFICATION = {
+ TITLE: "title",
+ TITLELOCALIZATIONKEY: "titleLocalizationKey",
+ TITLELOCALIZATIONARGS: "titleLocalizationArgs",
+ BODYLOCALIZATIONKEY: "bodyLocalizationKey",
+ BODYLOCALIZATIONARGS: "bodyLocalizationArgs",
+ BODY: "body",
+ ICON: "icon",
+ SOUND: "Sound",
+ TAG: "Tag",
+ COLOR: "Color",
+ CLICKACTION: "ClickAction",
+ CHANNELID: "ChannelId",
+ IMAGEURL: "ImageUrl",
+ LINK: "Link",
+ NOTIFYID: "NotifyId",
+ WHEN: "When",
+ LIGHTSETTINGS: "LightSettings",
+ BADGENUMBER: "BadgeNumber",
+ IMPORTANCE: "Importance",
+ TICKER: "Ticker",
+ VIBRATECONFIG: "vibrateConfig",
+ VISIBILITY: "visibility",
+ INTENTURI: "intentUri",
+ ISAUTOCANCEL: "isAutoCancel",
+ ISLOCALONLY: "isLocalOnly",
+ ISDEFAULTLIGHT: "isDefaultLight",
+ ISDEFAULTSOUND: "isDefaultSound",
+ ISDEFAULTVIBRATE: "isDefaultVibrate",
+ };
+ return CordovaRemoteMessage;
+}());
+
+exports.CordovaRemoteMessage = CordovaRemoteMessage;
+exports.HmsLocalNotification = HmsLocalNotification;
+exports.HmsPush = HmsPush;
+exports.HmsPushEvent = HmsPushEvent;
+exports.HmsPushProfile = HmsPushProfile;
diff --git a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.d.ts b/cordova-plugin-hms-push/ionic-native/dist/ngx/index.d.ts
index f27a45ff..7cbac66e 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.d.ts
+++ b/cordova-plugin-hms-push/ionic-native/dist/ngx/index.d.ts
@@ -14,8 +14,8 @@
limitations under the License.
*/
-import { IonicNativePlugin } from "@ionic-native/core";
-export declare class HmsPush extends IonicNativePlugin {
+import { AwesomeCordovaNativePlugin } from "@awesome-cordova-plugins/core";
+export declare class HmsPush extends AwesomeCordovaNativePlugin {
HmsPushResultCode: typeof HmsPushResultCode;
CordovaRemoteMessage: typeof CordovaRemoteMessage;
RemoteMessageBuilder: typeof RemoteMessageBuilder;
@@ -113,16 +113,14 @@ export declare class HmsPush extends IonicNativePlugin {
removeItem(key: string): Promise;
removeBackgroundFile(): Promise;
}
-export declare class HmsLocalNotification extends IonicNativePlugin {
+export declare class HmsLocalNotification extends AwesomeCordovaNativePlugin {
Attr: typeof Attr;
Importance: typeof Importance;
Priority: typeof Priority;
RepeatType: typeof RepeatType;
Visibility: typeof Visibility;
localNotification(localNotification: LocalNotificationObject): Promise;
- localNotificationSchedule(
- localNotification: LocalNotificationObject
- ): Promise;
+ localNotificationSchedule(localNotification: LocalNotificationObject): Promise;
cancelAllNotifications(): Promise;
cancelNotifications(): Promise;
cancelScheduledNotifications(): Promise;
@@ -136,7 +134,7 @@ export declare class HmsLocalNotification extends IonicNativePlugin {
channelBlocked(channelId: string): Promise;
deleteChannel(channelId: string): Promise;
}
-export declare class HmsPushEvent extends IonicNativePlugin {
+export declare class HmsPushEvent extends AwesomeCordovaNativePlugin {
onRemoteMessageReceived(callback: (data: any) => void): void;
onTokenReceived(callback: (data: any) => void): void;
onTokenError(callback: (data: any) => void): void;
@@ -158,7 +156,7 @@ export declare class HmsPushEvent extends IonicNativePlugin {
ON_MULTI_SENDER_TOKEN_ERROR_EVENT: string;
ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT: string;
}
-export declare class HmsPushProfile extends IonicNativePlugin {
+export declare class HmsPushProfile extends AwesomeCordovaNativePlugin {
HUAWEI_PROFILE: number;
CUSTOM_PROFILE: number;
UNDEFINED_PROFILE: number;
@@ -167,16 +165,9 @@ export declare class HmsPushProfile extends IonicNativePlugin {
*/
isSupportProfile(): Promise;
addProfile(type: number, profileId: string): Promise;
- addProfileWithSubjectId(
- subjectId: string,
- type: number,
- profileId: string
- ): Promise;
+ addProfileWithSubjectId(subjectId: string, type: number, profileId: string): Promise;
deleteProfile(profileId: string): Promise;
- deleteProfileWithSubjectId(
- subjectId: string,
- profileId: string
- ): Promise;
+ deleteProfileWithSubjectId(subjectId: string, profileId: string): Promise;
}
export declare enum HmsPushResultCode {
SUCCESS = "0",
@@ -220,7 +211,7 @@ export declare enum HmsPushResultCode {
ERROR_CERT_FINGERPRINT_ERROR = "6003",
ERROR_PERMISSION_NOT_EXIST = "6004",
ERROR_PERMISSION_NOT_AUTHORIZED = "6005",
- ERROR_PERMISSION_EXPIRED = "6006",
+ ERROR_PERMISSION_EXPIRED = "6006"
}
export declare enum Attr {
id = "id",
@@ -259,7 +250,7 @@ export declare enum Attr {
priority = "priority",
importance = "importance",
visibility = "visibility",
- data = "data",
+ data = "data"
}
export declare enum Importance {
MAX = "max",
@@ -268,26 +259,26 @@ export declare enum Importance {
LOW = "low",
MIN = "min",
NONE = "none",
- UNSPECIFIED = "unspecified",
+ UNSPECIFIED = "unspecified"
}
export declare enum Priority {
MAX = "max",
HIGH = "high",
DEFAULT = "default",
LOW = "low",
- MIN = "min",
+ MIN = "min"
}
export declare enum RepeatType {
HOUR = "hour",
MINUTE = "minute",
DAY = "day",
WEEK = "week",
- CUSTOM_TIME = "custom_time",
+ CUSTOM_TIME = "custom_time"
}
export declare enum Visibility {
PUBLIC = "public",
SECRET = "secret",
- PRIVATE = "private",
+ PRIVATE = "private"
}
export declare enum RemoteMessageBuilder {
TO = "to",
@@ -297,7 +288,7 @@ export declare enum RemoteMessageBuilder {
COLLAPSE_KEY = "collapseKey",
RECEIPT_MODE = "receiptMode",
SEND_MODE = "sendMode",
- DATA = "data",
+ DATA = "data"
}
declare class CordovaRemoteMessage {
static INSTANCE_ID_SCOPE: string;
diff --git a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.js b/cordova-plugin-hms-push/ionic-native/dist/ngx/index.js
index 1a43568f..212812a3 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.js
+++ b/cordova-plugin-hms-push/ionic-native/dist/ngx/index.js
@@ -13,13 +13,15 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
-import { __extends } from "tslib";
+
+import { __decorate, __extends } from "tslib";
import { Injectable } from "@angular/core";
-import { IonicNativePlugin, cordova } from "@ionic-native/core";
+import { AwesomeCordovaNativePlugin, cordova } from "@awesome-cordova-plugins/core";
+import * as i0 from "@angular/core";
var HmsPush = /** @class */ (function (_super) {
__extends(HmsPush, _super);
function HmsPush() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.HmsPushResultCode = HmsPushResultCode;
_this.CordovaRemoteMessage = CordovaRemoteMessage;
_this.RemoteMessageBuilder = RemoteMessageBuilder;
@@ -30,207 +32,194 @@ var HmsPush = /** @class */ (function (_super) {
* This method initialized HmsPush.
* @returns Promise
*/
- HmsPush.prototype.init = function () {
- return cordova(this, "init", { otherPromise: true }, arguments);
- };
- HmsPush.prototype.enableLogger = function () {
- return cordova(this, "enableLogger", { otherPromise: true }, arguments);
- };
- HmsPush.prototype.disableLogger = function () {
- return cordova(
- this,
- "disableLogger",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPush.prototype.init = function () { return cordova(this, "init", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
/**
* This method is used to disable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
* @returns Promise
*/
- HmsPush.prototype.turnOnPush = function () {
- return cordova(this, "turnOnPush", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.turnOnPush = function () { return cordova(this, "turnOnPush", { "otherPromise": true }, arguments); };
/**
* This method is used to enable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
* @returns Promise
*/
- HmsPush.prototype.turnOffPush = function () {
- return cordova(this, "turnOffPush", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.turnOffPush = function () { return cordova(this, "turnOffPush", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain an AAID in synchronous mode. Before applying for a token, an app calls this method to obtain its unique AAID. The HUAWEI Push server generates a token for the app based on the AAID. If the AAID of the app changes, a new token will be generated next time when the app applies for a token. If an app needs to report statistics events, it must carry the AAID as its unique ID.
* @returns Promise
*/
- HmsPush.prototype.getId = function () {
- return cordova(this, "getId", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.getId = function () { return cordova(this, "getId", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain an AAID in asynchronous mode.
* @returns Promise
*/
- HmsPush.prototype.getAAID = function () {
- return cordova(this, "getAAID", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.getAAID = function () { return cordova(this, "getAAID", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain a token required for accessing HUAWEI Push Kit. If there is no local AAID, this method will automatically generate an AAID when it is called because the HUAWEI Push Kit server needs to generate a token based on the AAID.
* @returns Promise
* @params scope ? : String
*/
- HmsPush.prototype.getToken = function (scope) {
- return cordova(this, "getToken", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.getToken = function (scope) { return cordova(this, "getToken", { "otherPromise": true }, arguments); };
/**
* Obtains a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
* @returns Promise
* @params subjectId ? : String
*/
- HmsPush.prototype.getTokenWithSubjectId = function (subjectId) {
- return cordova(
- this,
- "getTokenWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPush.prototype.getTokenWithSubjectId = function (subjectId) { return cordova(this, "getTokenWithSubjectId", { "otherPromise": true }, arguments); };
/**
* This method is used to obtain the generation timestamp of an AAID.
* @returns Promise
*/
- HmsPush.prototype.getCreationTime = function () {
- return cordova(
- this,
- "getCreationTime",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPush.prototype.getCreationTime = function () { return cordova(this, "getCreationTime", { "otherPromise": true }, arguments); };
/**
* This method is used to delete a local AAID and its generation timestamp.
* @returns Promise
*/
- HmsPush.prototype.deleteAAID = function () {
- return cordova(this, "deleteAAID", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.deleteAAID = function () { return cordova(this, "deleteAAID", { "otherPromise": true }, arguments); };
/**
* This method is used to delete a token. After a token is deleted, the corresponding AAID will not be deleted. This method is a synchronous method.
* @returns Promise
* @params scope ? : String
*/
- HmsPush.prototype.deleteToken = function (scope) {
- return cordova(this, "deleteToken", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.deleteToken = function (scope) { return cordova(this, "deleteToken", { "otherPromise": true }, arguments); };
/**
* Deletes a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
* @returns Promise
* @params subjectId ? : String
*/
- HmsPush.prototype.deleteTokenWithSubjectId = function (subjectId) {
- return cordova(
- this,
- "deleteTokenWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPush.prototype.deleteTokenWithSubjectId = function (subjectId) { return cordova(this, "deleteTokenWithSubjectId", { "otherPromise": true }, arguments); };
/**
* This method is used to subscribe to topics in asynchronous mode. The HUAWEI Push Kit topic messaging function allows you to send messages to multiple devices whose users have subscribed to a specific topic. You can write messages about the topic as required, and HUAWEI Push Kit determines the release path and sends messages to the correct devices in a reliable manner.
* @param {string} topic Topic to be subscribed to.
* @returns Promise
*/
- HmsPush.prototype.subscribe = function (topic) {
- return cordova(this, "subscribe", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.subscribe = function (topic) { return cordova(this, "subscribe", { "otherPromise": true }, arguments); };
/**
* This method is used to unsubscribe from topics that are subscribed to through the subscribe method.
* @param {string} topic Topic to be unsubscribed to.
* @returns Promise
*/
- HmsPush.prototype.unsubscribe = function (topic) {
- return cordova(this, "unsubscribe", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.unsubscribe = function (topic) { return cordova(this, "unsubscribe", { "otherPromise": true }, arguments); };
/**
* Sets whether to enable automatic initialization. If the enable parameter is set to true, the SDK automatically generates an AAID and applies for a token.
* @returns Promise
* @param {boolean} enabled Indicates whether to enable automatic initialization.
*/
- HmsPush.prototype.setAutoInitEnabled = function (enabled) {
- return cordova(
- this,
- "setAutoInitEnabled",
- { otherPromise: true },
- arguments
- );
- };
- HmsPush.prototype.getOdid = function () {
- return cordova(this, "getOdid", { otherPromise: true }, arguments);
- };
+ HmsPush.prototype.setAutoInitEnabled = function (enabled) { return cordova(this, "setAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getOdid = function () { return cordova(this, "getOdid", { "otherPromise": true }, arguments); };
/**
* This method is used to check whether automatic initialization is enabled.
* @returns Promise
*/
- HmsPush.prototype.isAutoInitEnabled = function () {
- return cordova(
- this,
- "isAutoInitEnabled",
- { otherPromise: true },
- arguments
- );
- };
- HmsPush.prototype.getInitialNotification = function () {
- return cordova(
- this,
- "getInitialNotification",
- { otherPromise: true },
- arguments
- );
- };
- HmsPush.prototype.sendRemoteMessage = function (remoteMessage) {
- return cordova(
- this,
- "sendRemoteMessage",
- { otherPromise: true },
- arguments
- );
- };
- HmsPush.prototype.setBackgroundFile = function (filePath) {
- return cordova(
- this,
- "setBackgroundFile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPush.prototype.setItem = function (key, value) {
- return cordova(this, "setItem", { otherPromise: true }, arguments);
- };
- HmsPush.prototype.getItem = function (key) {
- return cordova(this, "getItem", { otherPromise: true }, arguments);
- };
- HmsPush.prototype.removeItem = function (key) {
- return cordova(this, "removeItem", { otherPromise: true }, arguments);
- };
- HmsPush.prototype.removeBackgroundFile = function () {
- return cordova(
- this,
- "removeBackgroundFile",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPush.prototype.isAutoInitEnabled = function () { return cordova(this, "isAutoInitEnabled", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getInitialNotification = function () { return cordova(this, "getInitialNotification", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.sendRemoteMessage = function (remoteMessage) { return cordova(this, "sendRemoteMessage", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.setBackgroundFile = function (filePath) { return cordova(this, "setBackgroundFile", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.setItem = function (key, value) { return cordova(this, "setItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.getItem = function (key) { return cordova(this, "getItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.removeItem = function (key) { return cordova(this, "removeItem", { "otherPromise": true }, arguments); };
+ HmsPush.prototype.removeBackgroundFile = function () { return cordova(this, "removeBackgroundFile", { "otherPromise": true }, arguments); };
+ HmsPush.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPush, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
+ HmsPush.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPush });
HmsPush.pluginName = "HmsPush";
HmsPush.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPush.pluginRef = "HmsPush";
HmsPush.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPush.platforms = ["Android"];
- HmsPush.decorators = [{ type: Injectable }];
+ HmsPush = __decorate([], HmsPush);
return HmsPush;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
export { HmsPush };
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPush, decorators: [{
+ type: Injectable
+ }], propDecorators: {
+ /**
+ * This method initialized HmsPush.
+ * @returns Promise
+ */
+ init: [], enableLogger: [], disableLogger: [],
+ /**
+ * This method is used to disable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ turnOnPush: [],
+ /**
+ * This method is used to enable the display of notification messages. If you want to control the display of notification messages in an app, you can call this method. This method applies to notification messages but not data messages. It is the app that determines whether to enable or disable data messaging.
+ * @returns Promise
+ */
+ turnOffPush: [],
+ /**
+ * This method is used to obtain an AAID in synchronous mode. Before applying for a token, an app calls this method to obtain its unique AAID. The HUAWEI Push server generates a token for the app based on the AAID. If the AAID of the app changes, a new token will be generated next time when the app applies for a token. If an app needs to report statistics events, it must carry the AAID as its unique ID.
+ * @returns Promise
+ */
+ getId: [],
+ /**
+ * This method is used to obtain an AAID in asynchronous mode.
+ * @returns Promise
+ */
+ getAAID: [],
+ /**
+ * This method is used to obtain a token required for accessing HUAWEI Push Kit. If there is no local AAID, this method will automatically generate an AAID when it is called because the HUAWEI Push Kit server needs to generate a token based on the AAID.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ getToken: [],
+ /**
+ * Obtains a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ getTokenWithSubjectId: [],
+ /**
+ * This method is used to obtain the generation timestamp of an AAID.
+ * @returns Promise
+ */
+ getCreationTime: [],
+ /**
+ * This method is used to delete a local AAID and its generation timestamp.
+ * @returns Promise
+ */
+ deleteAAID: [],
+ /**
+ * This method is used to delete a token. After a token is deleted, the corresponding AAID will not be deleted. This method is a synchronous method.
+ * @returns Promise
+ * @params scope ? : String
+ */
+ deleteToken: [],
+ /**
+ * Deletes a token that a target app developer applies for a sender to integrate Push Kit in the multi-sender scenario.
+ * @returns Promise
+ * @params subjectId ? : String
+ */
+ deleteTokenWithSubjectId: [],
+ /**
+ * This method is used to subscribe to topics in asynchronous mode. The HUAWEI Push Kit topic messaging function allows you to send messages to multiple devices whose users have subscribed to a specific topic. You can write messages about the topic as required, and HUAWEI Push Kit determines the release path and sends messages to the correct devices in a reliable manner.
+ * @param {string} topic Topic to be subscribed to.
+ * @returns Promise
+ */
+ subscribe: [],
+ /**
+ * This method is used to unsubscribe from topics that are subscribed to through the subscribe method.
+ * @param {string} topic Topic to be unsubscribed to.
+ * @returns Promise
+ */
+ unsubscribe: [],
+ /**
+ * Sets whether to enable automatic initialization. If the enable parameter is set to true, the SDK automatically generates an AAID and applies for a token.
+ * @returns Promise
+ * @param {boolean} enabled Indicates whether to enable automatic initialization.
+ */
+ setAutoInitEnabled: [], getOdid: [],
+ /**
+ * This method is used to check whether automatic initialization is enabled.
+ * @returns Promise
+ */
+ isAutoInitEnabled: [], getInitialNotification: [], sendRemoteMessage: [], setBackgroundFile: [], setItem: [], getItem: [], removeItem: [], removeBackgroundFile: [] } });
var HmsLocalNotification = /** @class */ (function (_super) {
__extends(HmsLocalNotification, _super);
function HmsLocalNotification() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.Attr = Attr;
_this.Importance = Importance;
_this.Priority = Priority;
@@ -238,238 +227,78 @@ var HmsLocalNotification = /** @class */ (function (_super) {
_this.Visibility = Visibility;
return _this;
}
- HmsLocalNotification.prototype.localNotification = function (
- localNotification
- ) {
- return cordova(
- this,
- "localNotification",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.localNotificationSchedule = function (
- localNotification
- ) {
- return cordova(
- this,
- "localNotificationSchedule",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelAllNotifications = function () {
- return cordova(
- this,
- "cancelAllNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelNotifications = function () {
- return cordova(
- this,
- "cancelNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelScheduledNotifications = function () {
- return cordova(
- this,
- "cancelScheduledNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelNotificationsWithId = function (id) {
- return cordova(
- this,
- "cancelNotificationsWithId",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelNotificationsWithIdTag = function (
- idTag
- ) {
- return cordova(
- this,
- "cancelNotificationsWithIdTag",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.cancelNotificationsWithTag = function (tag) {
- return cordova(
- this,
- "cancelNotificationsWithTag",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.getNotifications = function () {
- return cordova(
- this,
- "getNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.getScheduledNotifications = function () {
- return cordova(
- this,
- "getScheduledNotifications",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.getChannels = function () {
- return cordova(this, "getChannels", { otherPromise: true }, arguments);
- };
- HmsLocalNotification.prototype.channelExists = function (channelId) {
- return cordova(
- this,
- "channelExists",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.channelBlocked = function (channelId) {
- return cordova(
- this,
- "channelBlocked",
- { otherPromise: true },
- arguments
- );
- };
- HmsLocalNotification.prototype.deleteChannel = function (channelId) {
- return cordova(
- this,
- "deleteChannel",
- { otherPromise: true },
- arguments
- );
- };
+ HmsLocalNotification.prototype.localNotification = function (localNotification) { return cordova(this, "localNotification", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.localNotificationSchedule = function (localNotification) { return cordova(this, "localNotificationSchedule", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelAllNotifications = function () { return cordova(this, "cancelAllNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotifications = function () { return cordova(this, "cancelNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelScheduledNotifications = function () { return cordova(this, "cancelScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithId = function (id) { return cordova(this, "cancelNotificationsWithId", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithIdTag = function (idTag) { return cordova(this, "cancelNotificationsWithIdTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.cancelNotificationsWithTag = function (tag) { return cordova(this, "cancelNotificationsWithTag", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getNotifications = function () { return cordova(this, "getNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getScheduledNotifications = function () { return cordova(this, "getScheduledNotifications", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.getChannels = function () { return cordova(this, "getChannels", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.channelExists = function (channelId) { return cordova(this, "channelExists", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.channelBlocked = function (channelId) { return cordova(this, "channelBlocked", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.prototype.deleteChannel = function (channelId) { return cordova(this, "deleteChannel", { "otherPromise": true }, arguments); };
+ HmsLocalNotification.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsLocalNotification, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
+ HmsLocalNotification.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsLocalNotification });
HmsLocalNotification.pluginName = "HmsLocalNotification";
HmsLocalNotification.plugin = "@hmscore/cordova-plugin-hms-push";
HmsLocalNotification.pluginRef = "HmsLocalNotification";
- HmsLocalNotification.repo =
- "https://github.com/HMS-Core/hms-cordova-plugin";
+ HmsLocalNotification.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsLocalNotification.platforms = ["Android"];
- HmsLocalNotification.decorators = [{ type: Injectable }];
+ HmsLocalNotification = __decorate([], HmsLocalNotification);
return HmsLocalNotification;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
export { HmsLocalNotification };
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsLocalNotification, decorators: [{
+ type: Injectable
+ }], propDecorators: { localNotification: [], localNotificationSchedule: [], cancelAllNotifications: [], cancelNotifications: [], cancelScheduledNotifications: [], cancelNotificationsWithId: [], cancelNotificationsWithIdTag: [], cancelNotificationsWithTag: [], getNotifications: [], getScheduledNotifications: [], getChannels: [], channelExists: [], channelBlocked: [], deleteChannel: [] } });
var HmsPushEvent = /** @class */ (function (_super) {
__extends(HmsPushEvent, _super);
function HmsPushEvent() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.REMOTE_DATA_MESSAGE_RECEIVED = "REMOTE_DATA_MESSAGE_RECEIVED";
_this.TOKEN_RECEIVED_EVENT = "TOKEN_RECEIVED_EVENT";
_this.ON_TOKEN_ERROR_EVENT = "ON_TOKEN_ERROR_EVENT";
_this.NOTIFICATION_OPENED_EVENT = "NOTIFICATION_OPENED_EVENT";
- _this.LOCAL_NOTIFICATION_ACTION_EVENT =
- "LOCAL_NOTIFICATION_ACTION_EVENT";
+ _this.LOCAL_NOTIFICATION_ACTION_EVENT = "LOCAL_NOTIFICATION_ACTION_EVENT";
_this.ON_PUSH_MESSAGE_SENT = "ON_PUSH_MESSAGE_SENT";
_this.ON_PUSH_MESSAGE_SENT_ERROR = "ON_PUSH_MESSAGE_SENT_ERROR";
_this.ON_PUSH_MESSAGE_SENT_DELIVERED = "ON_PUSH_MESSAGE_SENT_DELIVERED";
- _this.ON_MULTI_SENDER_TOKEN_ERROR_EVENT =
- "ON_MULTI_SENDER_TOKEN_ERROR_EVENT";
- _this.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT =
- "ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT";
+ _this.ON_MULTI_SENDER_TOKEN_ERROR_EVENT = "ON_MULTI_SENDER_TOKEN_ERROR_EVENT";
+ _this.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT = "ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT";
return _this;
}
- HmsPushEvent.prototype.onRemoteMessageReceived = function (callback) {
- return cordova(
- this,
- "onRemoteMessageReceived",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onTokenReceived = function (callback) {
- return cordova(
- this,
- "onTokenReceived",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onTokenError = function (callback) {
- return cordova(this, "onTokenError", { otherPromise: true }, arguments);
- };
- HmsPushEvent.prototype.onPushMessageSent = function (callback) {
- return cordova(
- this,
- "onPushMessageSent",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onPushMessageSentError = function (callback) {
- return cordova(
- this,
- "onPushMessageSentError",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onPushMessageSentDelivered = function (callback) {
- return cordova(
- this,
- "onPushMessageSentDelivered",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onLocalNotificationAction = function (callback) {
- return cordova(
- this,
- "onLocalNotificationAction",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onNotificationOpenedApp = function (callback) {
- return cordova(
- this,
- "onNotificationOpenedApp",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onMultiSenderTokenReceivedEvent = function (
- callback
- ) {
- return cordova(
- this,
- "onMultiSenderTokenReceivedEvent",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushEvent.prototype.onMultiSenderTokenErrorEvent = function (callback) {
- return cordova(
- this,
- "onMultiSenderTokenErrorEvent",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushEvent.prototype.onRemoteMessageReceived = function (callback) { return cordova(this, "onRemoteMessageReceived", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onTokenReceived = function (callback) { return cordova(this, "onTokenReceived", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onTokenError = function (callback) { return cordova(this, "onTokenError", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSent = function (callback) { return cordova(this, "onPushMessageSent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSentError = function (callback) { return cordova(this, "onPushMessageSentError", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onPushMessageSentDelivered = function (callback) { return cordova(this, "onPushMessageSentDelivered", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onLocalNotificationAction = function (callback) { return cordova(this, "onLocalNotificationAction", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onNotificationOpenedApp = function (callback) { return cordova(this, "onNotificationOpenedApp", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onMultiSenderTokenReceivedEvent = function (callback) { return cordova(this, "onMultiSenderTokenReceivedEvent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.prototype.onMultiSenderTokenErrorEvent = function (callback) { return cordova(this, "onMultiSenderTokenErrorEvent", { "otherPromise": true }, arguments); };
+ HmsPushEvent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushEvent, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
+ HmsPushEvent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushEvent });
HmsPushEvent.pluginName = "HmsPushEvent";
HmsPushEvent.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPushEvent.pluginRef = "HmsPushEvent";
HmsPushEvent.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPushEvent.platforms = ["Android"];
- HmsPushEvent.decorators = [{ type: Injectable }];
+ HmsPushEvent = __decorate([], HmsPushEvent);
return HmsPushEvent;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
export { HmsPushEvent };
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushEvent, decorators: [{
+ type: Injectable
+ }], propDecorators: { onRemoteMessageReceived: [], onTokenReceived: [], onTokenError: [], onPushMessageSent: [], onPushMessageSentError: [], onPushMessageSentDelivered: [], onLocalNotificationAction: [], onNotificationOpenedApp: [], onMultiSenderTokenReceivedEvent: [], onMultiSenderTokenErrorEvent: [] } });
var HmsPushProfile = /** @class */ (function (_super) {
__extends(HmsPushProfile, _super);
function HmsPushProfile() {
- var _this = (_super !== null && _super.apply(this, arguments)) || this;
+ var _this = _super !== null && _super.apply(this, arguments) || this;
_this.HUAWEI_PROFILE = 1;
_this.CUSTOM_PROFILE = 2;
_this.UNDEFINED_PROFILE = -1;
@@ -478,57 +307,29 @@ var HmsPushProfile = /** @class */ (function (_super) {
/**
*
*/
- HmsPushProfile.prototype.isSupportProfile = function () {
- return cordova(
- this,
- "isSupportProfile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfile.prototype.addProfile = function (type, profileId) {
- return cordova(this, "addProfile", { otherPromise: true }, arguments);
- };
- HmsPushProfile.prototype.addProfileWithSubjectId = function (
- subjectId,
- type,
- profileId
- ) {
- return cordova(
- this,
- "addProfileWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfile.prototype.deleteProfile = function (profileId) {
- return cordova(
- this,
- "deleteProfile",
- { otherPromise: true },
- arguments
- );
- };
- HmsPushProfile.prototype.deleteProfileWithSubjectId = function (
- subjectId,
- profileId
- ) {
- return cordova(
- this,
- "deleteProfileWithSubjectId",
- { otherPromise: true },
- arguments
- );
- };
+ HmsPushProfile.prototype.isSupportProfile = function () { return cordova(this, "isSupportProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.addProfile = function (type, profileId) { return cordova(this, "addProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.addProfileWithSubjectId = function (subjectId, type, profileId) { return cordova(this, "addProfileWithSubjectId", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.deleteProfile = function (profileId) { return cordova(this, "deleteProfile", { "otherPromise": true }, arguments); };
+ HmsPushProfile.prototype.deleteProfileWithSubjectId = function (subjectId, profileId) { return cordova(this, "deleteProfileWithSubjectId", { "otherPromise": true }, arguments); };
+ HmsPushProfile.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushProfile, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
+ HmsPushProfile.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushProfile });
HmsPushProfile.pluginName = "HmsPushProfile";
HmsPushProfile.plugin = "@hmscore/cordova-plugin-hms-push";
HmsPushProfile.pluginRef = "HmsPushProfile";
HmsPushProfile.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HmsPushProfile.platforms = ["Android"];
- HmsPushProfile.decorators = [{ type: Injectable }];
+ HmsPushProfile = __decorate([], HmsPushProfile);
return HmsPushProfile;
-})(IonicNativePlugin);
+}(AwesomeCordovaNativePlugin));
export { HmsPushProfile };
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HmsPushProfile, decorators: [{
+ type: Injectable
+ }], propDecorators: {
+ /**
+ *
+ */
+ isSupportProfile: [], addProfile: [], addProfileWithSubjectId: [], deleteProfile: [], deleteProfileWithSubjectId: [] } });
export var HmsPushResultCode;
(function (HmsPushResultCode) {
// Success
@@ -576,8 +377,7 @@ export var HmsPushResultCode;
// The operation cannot be performed in the main thread.
HmsPushResultCode["ERROR_MAIN_THREAD"] = "907122050";
// The device certificate authentication fails.
- HmsPushResultCode["ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING"] =
- "907122051";
+ HmsPushResultCode["ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING"] = "907122051";
// Failed to bind the service.
HmsPushResultCode["ERROR_BIND_SERVICE_SELF_MAPPING"] = "907122052";
// The SDK is being automatically initialized. Try again later.
@@ -715,9 +515,7 @@ export var RemoteMessageBuilder;
})(RemoteMessageBuilder || (RemoteMessageBuilder = {}));
var CordovaRemoteMessage = /** @class */ (function () {
function CordovaRemoteMessage(options) {
- if (options === void 0) {
- options = {};
- }
+ if (options === void 0) { options = {}; }
this.remoteMsg = options;
}
/*
@@ -818,33 +616,25 @@ var CordovaRemoteMessage = /** @class */ (function () {
* Notification:getTitleLocalizationKey() Obtains the key of the displayed title of a notification message
*/
CordovaRemoteMessage.prototype.getTitleLocalizationKey = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY];
};
/*
* Notification:getTitleLocalizationArgs() Obtains variable parameters of the displayed title of a message
*/
CordovaRemoteMessage.prototype.getTitleLocalizationArgs = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS];
};
/*
* Notification:getBodyLocalizationKey() Obtains the key of the displayed content of a message
*/
CordovaRemoteMessage.prototype.getBodyLocalizationKey = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY];
};
/*
* Notification:getBodyLocalizationArgs() Obtains variable parameters of the displayed content of a message
*/
CordovaRemoteMessage.prototype.getBodyLocalizationArgs = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS];
};
/*
* Notification:getBody() Obtains the body of a message
@@ -982,9 +772,7 @@ var CordovaRemoteMessage = /** @class */ (function () {
* Notification:isDefaultVibrate()
*/
CordovaRemoteMessage.prototype.isDefaultVibrate = function () {
- return this.remoteMsg[
- CordovaRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE
- ];
+ return this.remoteMsg[CordovaRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE];
};
CordovaRemoteMessage.INSTANCE_ID_SCOPE = "HCM";
CordovaRemoteMessage.PRIORITY_UNKNOWN = 0;
@@ -1035,6 +823,6 @@ var CordovaRemoteMessage = /** @class */ (function () {
ISDEFAULTVIBRATE: "isDefaultVibrate",
};
return CordovaRemoteMessage;
-})();
+}());
export { CordovaRemoteMessage };
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL25hdGl2ZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7O0FBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLDhCQUFzQyxNQUFNLG9CQUFvQixDQUFDOztJQVUzQywyQkFBaUI7OztRQUMxQyx1QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN0QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1Qyx5QkFBbUIsR0FBRyxLQUFLLENBQUE7OztJQUUzQjs7O09BR0c7SUFDSCxzQkFBSTtJQUtKLDhCQUFZO0lBS1osK0JBQWE7SUFLYjs7O09BR0c7SUFDSCw0QkFBVTtJQUtWOzs7T0FHRztJQUNILDZCQUFXO0lBS1g7OztPQUdHO0lBQ0gsdUJBQUs7SUFLTDs7O09BR0c7SUFDSCx5QkFBTztJQUtQOzs7O09BSUc7SUFDSCwwQkFBUSxhQUFDLEtBQWM7SUFLdkI7Ozs7T0FJRztJQUNILHVDQUFxQixhQUFDLFNBQWlCO0lBS3ZDOzs7T0FHRztJQUNILGlDQUFlO0lBS2Y7OztPQUdHO0lBQ0gsNEJBQVU7SUFLVjs7OztPQUlHO0lBQ0gsNkJBQVcsYUFBQyxLQUFjO0lBSzFCOzs7O09BSUc7SUFDSCwwQ0FBd0IsYUFBQyxTQUFpQjtJQUsxQzs7OztPQUlHO0lBQ0gsMkJBQVMsYUFBQyxLQUFhO0lBS3ZCOzs7O09BSUc7SUFDSCw2QkFBVyxhQUFDLEtBQWE7SUFLekI7Ozs7T0FJRztJQUNILG9DQUFrQixhQUFDLE9BQWdCO0lBS25DLHlCQUFPO0lBS1A7OztPQUdHO0lBQ0gsbUNBQWlCO0lBS2pCLHdDQUFzQjtJQUt0QixtQ0FBaUIsYUFBQyxhQUFrQztJQUtwRCxtQ0FBaUIs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Q3RCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLFVBQVU7UUFDcEIsSUFBSSxFQUFFLE1BQU07UUFDWixhQUFhLEVBQUUsZUFBZTtRQUM5QixXQUFXLEVBQUUsYUFBYTtRQUMxQixVQUFVLEVBQUUsWUFBWTtRQUN4QixNQUFNLEVBQUUsUUFBUTtRQUNoQixhQUFhLEVBQUUsZUFBZTtRQUM5QixVQUFVLEVBQUUsWUFBWTtRQUN4QixTQUFTLEVBQUUsV0FBVztRQUN0QixZQUFZLEVBQUUsY0FBYztRQUM1QixXQUFXLEVBQUUsYUFBYTtRQUMxQixjQUFjLEVBQUUsZ0JBQWdCO1FBQ2hDLGNBQWMsRUFBRSxnQkFBZ0I7UUFDaEMsZ0JBQWdCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7K0JBN3JCTjs7U0Ewb0JNLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IDIwMjAtMjAyMS4gSHVhd2VpIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIilcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFBsdWdpbiwgQ29yZG92YSwgSW9uaWNOYXRpdmVQbHVnaW4gfSBmcm9tIFwiQGlvbmljLW5hdGl2ZS9jb3JlXCI7XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaFwiLFxuICAgIHBsdWdpbjogXCJAaG1zY29yZS9jb3Jkb3ZhLXBsdWdpbi1obXMtcHVzaFwiLFxuICAgIHBsdWdpblJlZjogXCJIbXNQdXNoXCIsXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIbXNQdXNoIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAgIEhtc1B1c2hSZXN1bHRDb2RlID0gSG1zUHVzaFJlc3VsdENvZGU7XG4gICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UgPSBDb3Jkb3ZhUmVtb3RlTWVzc2FnZTtcbiAgICBSZW1vdGVNZXNzYWdlQnVpbGRlciA9IFJlbW90ZU1lc3NhZ2VCdWlsZGVyO1xuICAgIERFRkFVTFRfVE9LRU5fU0NPUEUgPSBcIkhDTVwiXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCAgaW5pdGlhbGl6ZWQgSG1zUHVzaC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gICAgICovXG4gICAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZW5hYmxlTG9nZ2VyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBkaXNhYmxlTG9nZ2VyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGRpc3BsYXkgb2Ygbm90aWZpY2F0aW9uIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBpbiBhbiBhcHAsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZC4gVGhpcyBtZXRob2QgYXBwbGllcyB0byBub3RpZmljYXRpb24gbWVzc2FnZXMgYnV0IG5vdCBkYXRhIG1lc3NhZ2VzLiBJdCBpcyB0aGUgYXBwIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIGRhdGEgbWVzc2FnaW5nLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIHR1cm5PblB1c2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgZGlzcGxheSBvZiBub3RpZmljYXRpb24gbWVzc2FnZXMgaW4gYW4gYXBwLCB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QuIFRoaXMgbWV0aG9kIGFwcGxpZXMgdG8gbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGJ1dCBub3QgZGF0YSBtZXNzYWdlcy4gSXQgaXMgdGhlIGFwcCB0aGF0IGRldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSBkYXRhIG1lc3NhZ2luZy5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICB0dXJuT2ZmUHVzaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYW4gQUFJRCBpbiBzeW5jaHJvbm91cyBtb2RlLiBCZWZvcmUgYXBwbHlpbmcgZm9yIGEgdG9rZW4sIGFuIGFwcCBjYWxscyB0aGlzIG1ldGhvZCB0byBvYnRhaW4gaXRzIHVuaXF1ZSBBQUlELiBUaGUgSFVBV0VJIFB1c2ggc2VydmVyIGdlbmVyYXRlcyBhIHRva2VuIGZvciB0aGUgYXBwIGJhc2VkIG9uIHRoZSBBQUlELiBJZiB0aGUgQUFJRCBvZiB0aGUgYXBwIGNoYW5nZXMsIGEgbmV3IHRva2VuIHdpbGwgYmUgZ2VuZXJhdGVkIG5leHQgdGltZSB3aGVuIHRoZSBhcHAgYXBwbGllcyBmb3IgYSB0b2tlbi4gSWYgYW4gYXBwIG5lZWRzIHRvIHJlcG9ydCBzdGF0aXN0aWNzIGV2ZW50cywgaXQgbXVzdCBjYXJyeSB0aGUgQUFJRCBhcyBpdHMgdW5pcXVlIElELlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIGdldElkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb2J0YWluIGFuIEFBSUQgaW4gYXN5bmNocm9ub3VzIG1vZGUuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICovXG4gICAgZ2V0QUFJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiBhIHRva2VuIHJlcXVpcmVkIGZvciBhY2Nlc3NpbmcgSFVBV0VJIFB1c2ggS2l0LiBJZiB0aGVyZSBpcyBubyBsb2NhbCBBQUlELCB0aGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYW4gQUFJRCB3aGVuIGl0IGlzIGNhbGxlZCBiZWNhdXNlIHRoZSBIVUFXRUkgUHVzaCBLaXQgc2VydmVyIG5lZWRzIHRvIGdlbmVyYXRlIGEgdG9rZW4gYmFzZWQgb24gdGhlIEFBSUQuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICogQHBhcmFtcyBzY29wZSA/IDogU3RyaW5nXG4gICAgICovXG4gICAgZ2V0VG9rZW4oc2NvcGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIGEgdG9rZW4gdGhhdCBhIHRhcmdldCBhcHAgZGV2ZWxvcGVyIGFwcGxpZXMgZm9yIGEgc2VuZGVyIHRvIGludGVncmF0ZSBQdXNoIEtpdCBpbiB0aGUgbXVsdGktc2VuZGVyIHNjZW5hcmlvLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqIEBwYXJhbXMgc3ViamVjdElkID8gOiBTdHJpbmdcbiAgICAgKi9cbiAgICBnZXRUb2tlbldpdGhTdWJqZWN0SWQoc3ViamVjdElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiB0aGUgZ2VuZXJhdGlvbiB0aW1lc3RhbXAgb2YgYW4gQUFJRC5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICBnZXRDcmVhdGlvblRpbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSBsb2NhbCBBQUlEIGFuZCBpdHMgZ2VuZXJhdGlvbiB0aW1lc3RhbXAuXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICovXG4gICAgZGVsZXRlQUFJRCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkZWxldGUgYSB0b2tlbi4gQWZ0ZXIgYSB0b2tlbiBpcyBkZWxldGVkLCB0aGUgY29ycmVzcG9uZGluZyBBQUlEIHdpbGwgbm90IGJlIGRlbGV0ZWQuIFRoaXMgbWV0aG9kIGlzIGEgc3luY2hyb25vdXMgbWV0aG9kLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqIEBwYXJhbXMgc2NvcGUgPyA6IFN0cmluZ1xuICAgICAqL1xuICAgIGRlbGV0ZVRva2VuKHNjb3BlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSB0b2tlbiB0aGF0IGEgdGFyZ2V0IGFwcCBkZXZlbG9wZXIgYXBwbGllcyBmb3IgYSBzZW5kZXIgdG8gaW50ZWdyYXRlIFB1c2ggS2l0IGluIHRoZSBtdWx0aS1zZW5kZXIgc2NlbmFyaW8uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XG4gICAgICogQHBhcmFtcyBzdWJqZWN0SWQgPyA6IFN0cmluZ1xuICAgICAqL1xuICAgIGRlbGV0ZVRva2VuV2l0aFN1YmplY3RJZChzdWJqZWN0SWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc3Vic2NyaWJlIHRvIHRvcGljcyBpbiBhc3luY2hyb25vdXMgbW9kZS4gVGhlIEhVQVdFSSBQdXNoIEtpdCB0b3BpYyBtZXNzYWdpbmcgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZW5kIG1lc3NhZ2VzIHRvIG11bHRpcGxlIGRldmljZXMgd2hvc2UgdXNlcnMgaGF2ZSBzdWJzY3JpYmVkIHRvIGEgc3BlY2lmaWMgdG9waWMuIFlvdSBjYW4gd3JpdGUgbWVzc2FnZXMgYWJvdXQgdGhlIHRvcGljIGFzIHJlcXVpcmVkLCBhbmQgSFVBV0VJIFB1c2ggS2l0IGRldGVybWluZXMgdGhlIHJlbGVhc2UgcGF0aCBhbmQgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNvcnJlY3QgZGV2aWNlcyBpbiBhIHJlbGlhYmxlIG1hbm5lci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgc3Vic2NyaWJlZCB0by5cbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cbiAgICAgKi9cbiAgICBzdWJzY3JpYmUodG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gdG9waWNzIHRoYXQgYXJlIHN1YnNjcmliZWQgdG8gdGhyb3VnaCB0aGUgc3Vic2NyaWJlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgdW5zdWJzY3JpYmVkIHRvLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIHVuc3Vic2NyaWJlKHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRvIGVuYWJsZSBhdXRvbWF0aWMgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBlbmFibGUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlLCB0aGUgU0RLIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGFuIEFBSUQgYW5kIGFwcGxpZXMgZm9yIGEgdG9rZW4uXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlZCBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgYXV0b21hdGljIGluaXRpYWxpemF0aW9uLlxuICAgICAqL1xuICAgIHNldEF1dG9Jbml0RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGdldE9kaWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbiBpcyBlbmFibGVkLlxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxuICAgICAqL1xuICAgIGlzQXV0b0luaXRFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXRJbml0aWFsTm90aWZpY2F0aW9uKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNlbmRSZW1vdGVNZXNzYWdlKHJlbW90ZU1lc3NhZ2U6IFJlbW90ZU1lc3NhZ2VPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgc2V0QmFja2dyb3VuZEZpbGUoZmlsZVBhdGg6c3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHNldEl0ZW0oa2V5OnN0cmluZyx2YWx1ZTpzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0SXRlbShrZXk6c3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgcmVtb3ZlSXRlbShrZXk6c3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIHJlbW92ZUJhY2tncm91bmRGaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG59XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zTG9jYWxOb3RpZmljYXRpb25cIixcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcbiAgICBwbHVnaW5SZWY6IFwiSG1zTG9jYWxOb3RpZmljYXRpb25cIixcbiAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhtc0xvY2FsTm90aWZpY2F0aW9uIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAgIEF0dHIgPSBBdHRyO1xuICAgIEltcG9ydGFuY2UgPSBJbXBvcnRhbmNlO1xuICAgIFByaW9yaXR5ID0gUHJpb3JpdHk7XG4gICAgUmVwZWF0VHlwZSA9IFJlcGVhdFR5cGU7XG4gICAgVmlzaWJpbGl0eSA9IFZpc2liaWxpdHk7XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGxvY2FsTm90aWZpY2F0aW9uKGxvY2FsTm90aWZpY2F0aW9uOiBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGxvY2FsTm90aWZpY2F0aW9uU2NoZWR1bGUobG9jYWxOb3RpZmljYXRpb246IExvY2FsTm90aWZpY2F0aW9uT2JqZWN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsQWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsU2NoZWR1bGVkTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhJZChpZDogbnVtYmVyW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhJZFRhZyhpZFRhZzogSWRUYWdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zV2l0aFRhZyh0YWc6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBnZXROb3RpZmljYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgIGdldFNjaGVkdWxlZE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgZ2V0Q2hhbm5lbHMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gICAgY2hhbm5lbEV4aXN0cyhjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBjaGFubmVsQmxvY2tlZChjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgICBkZWxldGVDaGFubmVsKGNoYW5uZWxJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59XG5cbkBQbHVnaW4oe1xuICAgIHBsdWdpbk5hbWU6IFwiSG1zUHVzaEV2ZW50XCIsXG4gICAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXG4gICAgcGx1Z2luUmVmOiBcIkhtc1B1c2hFdmVudFwiLFxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSG1zUHVzaEV2ZW50IGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uUmVtb3RlTWVzc2FnZVJlY2VpdmVkIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uVG9rZW5SZWNlaXZlZCAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvblRva2VuRXJyb3IgKGNhbGxiYWNrOihkYXRhOmFueSk9PnZvaWQpOnZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcbiAgb25QdXNoTWVzc2FnZVNlbnQgKGNhbGxiYWNrOihkYXRhOmFueSk9PnZvaWQpOnZvaWQge1xuICAgIHJldHVybjtcbiAgIH1cbiAgXG4gICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICAgb25QdXNoTWVzc2FnZVNlbnRFcnJvciAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvblB1c2hNZXNzYWdlU2VudERlbGl2ZXJlZCAoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBvbkxvY2FsTm90aWZpY2F0aW9uQWN0aW9uIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTm90aWZpY2F0aW9uT3BlbmVkQXBwIChjYWxsYmFjazooZGF0YTphbnkpPT52b2lkKTp2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTXVsdGlTZW5kZXJUb2tlblJlY2VpdmVkRXZlbnQoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIG9uTXVsdGlTZW5kZXJUb2tlbkVycm9yRXZlbnQoY2FsbGJhY2s6KGRhdGE6YW55KT0+dm9pZCk6dm9pZHtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIFJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRUQgPSBcIlJFTU9URV9EQVRBX01FU1NBR0VfUkVDRUlWRURcIlxuICBUT0tFTl9SRUNFSVZFRF9FVkVOVCA9IFwiVE9LRU5fUkVDRUlWRURfRVZFTlRcIlxuICBPTl9UT0tFTl9FUlJPUl9FVkVOVCA9IFwiT05fVE9LRU5fRVJST1JfRVZFTlRcIlxuICBOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UID0gXCJOT1RJRklDQVRJT05fT1BFTkVEX0VWRU5UXCJcbiAgTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVCA9IFwiTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVFwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVFwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0VSUk9SID0gXCJPTl9QVVNIX01FU1NBR0VfU0VOVF9FUlJPUlwiXG4gIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0RFTElWRVJFRCA9IFwiT05fUFVTSF9NRVNTQUdFX1NFTlRfREVMSVZFUkVEXCJcbiAgT05fTVVMVElfU0VOREVSX1RPS0VOX0VSUk9SX0VWRU5UID0gXCJPTl9NVUxUSV9TRU5ERVJfVE9LRU5fRVJST1JfRVZFTlRcIlxuICBPTl9NVUxUSV9TRU5ERVJfVE9LRU5fUkVDRUlWRURfRVZFTlQgPSBcIk9OX01VTFRJX1NFTkRFUl9UT0tFTl9SRUNFSVZFRF9FVkVOVFwiXG4gIH1cblxuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6IFwiSG1zUHVzaFByb2ZpbGVcIixcbiAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXG4gIHBsdWdpblJlZjogXCJIbXNQdXNoUHJvZmlsZVwiLFxuICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcbiAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIbXNQdXNoUHJvZmlsZSBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgXG4gIEhVQVdFSV9QUk9GSUxFPTE7XG4gIENVU1RPTV9QUk9GSUxFPTI7XG4gIFVOREVGSU5FRF9QUk9GSUxFPS0xO1xuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIC8qKlxuICAgKiBcbiAgICovXG4gIGlzU3VwcG9ydFByb2ZpbGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICByZXR1cm47XG4gIH1cblxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBhZGRQcm9maWxlKHR5cGU6bnVtYmVyLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIGFkZFByb2ZpbGVXaXRoU3ViamVjdElkKHN1YmplY3RJZDpzdHJpbmcsIHR5cGU6bnVtYmVyLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXG4gIGRlbGV0ZVByb2ZpbGUocHJvZmlsZUlkOnN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICByZXR1cm47XG4gIH1cblxuICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxuICBkZWxldGVQcm9maWxlV2l0aFN1YmplY3RJZChzdWJqZWN0SWQ6c3RyaW5nLCBwcm9maWxlSWQ6c3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBIbXNQdXNoUmVzdWx0Q29kZSB7XG4gICAgLy8gU3VjY2Vzc1xuICAgIFNVQ0NFU1MgPSBcIjBcIixcblxuICAgIC8vIEVycm9yXG4gICAgRVJST1IgPSBcIi0xXCIsXG5cbiAgICAvLyBCdW5kbGUgaXMgbnVsbCwgZXhjZXB0aW9uXG4gICAgTlVMTF9CVU5ETEUgPSBcIjMzM1wiLFxuXG4gICAgLy8gWW91IGRvIG5vdCBoYXZlIGEgdG9rZW4uIEFwcGx5IGZvciBhIHRva2VuLlxuICAgIEVSUk9SX05PX1RPS0VOID0gXCI5MDcxMjIwMzBcIixcblxuICAgIC8vIFRoZSBjdXJyZW50IG5ldHdvcmsgaXMgdW5hdmFpbGFibGUuIENoZWNrIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uXG4gICAgRVJST1JfTk9fTkVUV09SSyA9IFwiOTA3MTIyMDMxXCIsXG5cbiAgICAvLyBUaGUgdG9rZW4gaGFzIGV4cGlyZWQuIERlbGV0ZSB0aGUgdG9rZW4gYW5kIGFwcGx5IGZvciBhIG5ldyBvbmUuXG4gICAgRVJST1JfVE9LRU5fSU5WQUxJRCA9IFwiOTA3MTIyMDMyXCIsXG5cbiAgICAvLyBJZiB0aGUgUHVzaCBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlLCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cbiAgICBFUlJPUl9TRVJWSUNFX05PVF9BVkFJTEFCTEUgPSBcIjkwNzEyMjA0NlwiLFxuXG4gICAgLy8gSWYgdGhlIFB1c2ggc2VydmVyIHJldHVybnMgYW4gZXJyb3IsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1BVU0hfU0VSVkVSID0gXCI5MDcxMjIwNDdcIixcblxuICAgIC8vIFVua25vd24gZXJyb3IuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1VOS05PV04gPSBcIjkwNzEyMjA0NVwiLFxuXG4gICAgLy8gVGhlIG51bWJlciBvZiBzdWJzY3JpYmVkIHRvcGljcyBleGNlZWRzIDIwMDAuXG4gICAgRVJST1JfVE9QSUNfRVhDRUVEID0gXCI5MDcxMjIwMzRcIixcblxuICAgIC8vIEZhaWxlZCB0byBzZW5kIHRoZSBzdWJzY3JpcHRpb24gdG9waWMuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX1RPUElDX1NFTkQgPSBcIjkwNzEyMjAzNVwiLFxuXG4gICAgLy8gUHVzaCByaWdodHMgYXJlIG5vdCBlbmFibGVkLiBFbmFibGUgdGhlIHNlcnZpY2UgYW5kIHNldCBwdXNoIHNlcnZpY2UgcGFyYW1ldGVycyBhdCBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgRVJST1JfTk9fUklHSFQgPSBcIjkwNzEyMjAzNlwiLFxuXG4gICAgLy8gRmFpbGVkIHRvIGFwcGx5IGZvciB0aGUgdG9rZW4uIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgIEVSUk9SX0dFVF9UT0tFTl9FUlIgPSBcIjkwNzEyMjAzN1wiLFxuXG4gICAgLy8gTm8gc3RvcmFnZSBsb2NhdGlvbiBpcyBzZWxlY3RlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIG9yIHRoZSBzdG9yYWdlIGxvY2F0aW9uIGlzIGludmFsaWQuXG4gICAgRVJST1JfU1RPUkFHRV9MT0NBVElPTl9FTVBUWSA9IFwiOTA3MTIyMDM4XCIsXG5cbiAgICAvLyBGYWlsZWQgdG8gYXBwbHkgZm9yIGEgdG9rZW4uIENyb3NzLXJlZ2lvbiB0b2tlbiBhcHBsaWNhdGlvbiBpcyBub3QgYWxsb3dlZC5cbiAgICBFUlJPUl9OT1RfQUxMT1dfQ1JPU1NfQVBQTFkgPSBcIjkwNzEyMjA1M1wiLFxuXG4gICAgLy8gVGhlIG1lc3NhZ2UgYm9keSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0uXG4gICAgRVJST1JfU0laRSA9IFwiOTA3MTIyMDQxXCIsXG5cbiAgICAvLyBUaGUgbWVzc2FnZSBjb250YWlucyBpbnZhbGlkIHBhcmFtZXRlcnMuXG4gICAgRVJST1JfSU5WQUxJRF9QQVJBTUVURVJTID0gXCI5MDcxMjIwNDJcIixcblxuICAgIC8vIFRoZSBudW1iZXIgb2Ygc2VudCBtZXNzYWdlcyByZWFjaGVzIHRoZSB1cHBlciBsaW1pdC4gVGhlIG1lc3NhZ2VzIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgIEVSUk9SX1RPT19NQU5ZX01FU1NBR0VTID0gXCI5MDcxMjIwNDNcIixcblxuICAgIC8vIFRoZSBtZXNzYWdlIGxpZmV0aW1lIGV4cGlyZXMgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSBBUFAgc2VydmVyLlxuICAgIEVSUk9SX1RUTF9FWENFRURFRCA9IFwiOTA3MTIyMDQ0XCIsXG5cbiAgICAvLyAgSHVhd2VpIE1vYmlsZSBTZXJ2aWNlcyAoQVBLKSBjYW4ndCBjb25uZWN0ICBIdWF3ZWkgUHVzaCAgS2l0LlxuICAgIEVSUk9SX0hNU19DTElFTlRfQVBJID0gXCI5MDcxMjIwNDhcIixcblxuICAgIC8vIFRoZSBjdXJyZW50IEVNVUkgdmVyc2lvbiBpcyB0b28gZWFybHkgdG8gdXNlIHRoZSBjYXBhYmlsaXR5LlxuICAgIEVSUk9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEID0gXCI5MDcxMjIwNDlcIixcblxuICAgIC8vIFRoZSBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBpbiB0aGUgbWFpbiB0aHJlYWQuXG4gICAgRVJST1JfTUFJTl9USFJFQUQgPSBcIjkwNzEyMjA1MFwiLFxuXG4gICAgLy8gVGhlIGRldmljZSBjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICBFUlJPUl9ITVNfREVWSUNFX0FVVEhfRkFJTEVEX1NFTEZfTUFQUElORyA9IFwiOTA3MTIyMDUxXCIsXG5cbiAgICAvLyBGYWlsZWQgdG8gYmluZCB0aGUgc2VydmljZS5cbiAgICBFUlJPUl9CSU5EX1NFUlZJQ0VfU0VMRl9NQVBQSU5HID0gXCI5MDcxMjIwNTJcIixcblxuICAgIC8vIFRoZSBTREsgaXMgYmVpbmcgYXV0b21hdGljYWxseSBpbml0aWFsaXplZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgIEVSUk9SX0FVVE9fSU5JVElBTElaSU5HID0gXCI5MDcxMjIwNTRcIixcblxuICAgIC8qVGhlIGlucHV0IHBhcmFtZXRlciBpcyBpbmNvcnJlY3QuIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICAgICAqIEV4YW1wbGU6IGFwcF9pZCBpbiB0aGUgYWdjb25uZWN0IC0gc2VydmljZXMuanNvbiBmaWxlO1xuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1aWxkLmdyYWRsZSBmaWxlIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2VydGlmaWNhdGUgc2lnbmF0dXJlLlxuICAgICAqL1xuICAgIEVSUk9SX0FSR1VNRU5UU19JTlZBTElEID0gXCI5MDcxMzUwMDBcIixcblxuICAgIC8vIEludGVybmFsIFB1c2ggZXJyb3IuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0IGVuZ2luZWVycy5cbiAgICBFUlJPUl9JTlRFUk5BTF9FUlJPUiA9IFwiOTA3MTM1MDAxXCIsXG5cbiAgICAvLyBUaGUgc2VydmljZSBkb2VzIG5vdCBleGlzdC4gVGhlIGludm9rZWQgaW50ZXJmYWNlIGRvZXMgbm90IGV4aXN0LlxuICAgIEVSUk9SX05BTUlOR19JTlZBTElEID0gXCI5MDcxMzUwMDJcIixcblxuICAgIC8vIFRoZSBBcGlDbGllbnQgb2JqZWN0IGlzIGludmFsaWQuXG4gICAgRVJST1JfQ0xJRU5UX0FQSV9JTlZBTElEID0gXCI5MDcxMzUwMDNcIixcblxuICAgIC8vIEludm9raW5nIEFJREwgdGltZXMgb3V0LiBDb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cbiAgICBFUlJPUl9FWEVDVVRFX1RJTUVPVVQgPSBcIjkwNzEzNTAwNFwiLFxuXG4gICAgLy8gVGhlIGN1cnJlbnQgYXJlYSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgc2VydmljZS5cbiAgICBFUlJPUl9OT1RfSU5fU0VSVklDRSA9IFwiOTA3MTM1MDA1XCIsXG5cbiAgICAvLyBJZiB0aGUgQUlETCBjb25uZWN0aW9uIHNlc3Npb24gaXMgaW52YWxpZCwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXG4gICAgRVJST1JfU0VTU0lPTl9JTlZBTElEID0gXCI5MDcxMzUwMDZcIixcblxuICAgIC8vIEFuIGVycm9yIG9jY3VycmVkIHdoZW4gaW52b2tpbmcgYW4gdW5zcGVjaWZpZWQgQVBJLlxuICAgIEVSUk9SX0FQSV9OT1RfU1BFQ0lGSUVEID0gXCIxMDAyXCIsXG5cbiAgICAvKiBGYWlsZWQgdG8gaW52b2tlIHRoZSBnYXRld2F5IHRvIHF1ZXJ5IHRoZSBhcHBsaWNhdGlvbiBzY29wZS5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGFwcCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBlbmFibGVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgICAqL1xuICAgIEVSUk9SX0dFVF9TQ09QRV9FUlJPUiA9IFwiOTA3MTM1NzAwXCIsXG4gICAgLyogU2NvcGUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGFwcCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBlbmFibGVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxuICAgICAqL1xuICAgIEVSUk9SX1NDT1BFX0xJU1RfRU1QVFkgPSBcIjkwNzEzNTcwMVwiLFxuXG4gICAgLyogVGhlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IGlzIG5vdCBjb25maWd1cmVkIG9uIHRoZSBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgICogMS4gQ2hlY2sgd2hldGhlciB5b3VyIHBob25lIGNhbiBhY2Nlc3MgdGhlIEludGVybmV0LlxuICAgICAqIDIuIENoZWNrIHdoZXRoZXIgdGhlIGNvcnJlY3QgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgaXMgY29uZmlndXJlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuIEZvciBkZXRhaWxzLCBzZWUgQXBwR2FsbGVyeSBDb25uZWN0IGNvbmZpZ3VyYXRpb24gaW4gRGV2ZWxvcG1lbnQgUHJlcGFyYXRpb25zLlxuICAgICAqIDMuIElmIHRoZSBjaGVjayByZXN1bHQgaXMgY29ycmVjdCwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXG4gICAgICovXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FTVBUWSA9IFwiOTA3MTM1NzAyXCIsXG5cbiAgICAvLyBQZXJtaXNzaW9uIGlzIG5vdCBjb25maWd1cmVkIG9uIHRoZSBBcHBHYWxsZXJ5IENvbm5lY3QuXG4gICAgRVJST1JfUEVSTUlTU0lPTl9MSVNUX0VNUFRZID0gXCI5MDcxMzU3MDNcIixcblxuICAgIC8vIFRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgZXhpc3QuXG4gICAgRVJST1JfQVVUSF9JTkZPX05PVF9FWElTVCA9IFwiNjAwMlwiLFxuXG4gICAgLy8gQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbi4gQ2hlY2sgd2hldGhlciB0aGUgY29ycmVjdCBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCBpcyBjb25maWd1cmVkIGluIEFwcEdhbGxlcnkgQ29ubmVjdC4gRm9yIGRldGFpbHMsIHNlZSBBcHBHYWxsZXJ5IENvbm5lY3QgY29uZmlndXJhdGlvbiBpbiBEZXZlbG9wbWVudCBQcmVwYXJhdGlvbnMuXG4gICAgRVJST1JfQ0VSVF9GSU5HRVJQUklOVF9FUlJPUiA9IFwiNjAwM1wiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiBUaGUgcGVybWlzc2lvbiBkb2VzIG5vdCBleGlzdCBhbmQgaXMgbm90IGFwcGxpZWQgZm9yIGluIEFwcEdhbGxlcnkgQ29ubmVjdC5cbiAgICBFUlJPUl9QRVJNSVNTSU9OX05PVF9FWElTVCA9IFwiNjAwNFwiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiB1bmF1dGhvcml6ZWQuXG4gICAgRVJST1JfUEVSTUlTU0lPTl9OT1RfQVVUSE9SSVpFRCA9IFwiNjAwNVwiLFxuXG4gICAgLy8gSW50ZXJmYWNlIGF1dGhlbnRpY2F0aW9uOiBUaGUgYXV0aG9yaXphdGlvbiBleHBpcmVzLlxuICAgIEVSUk9SX1BFUk1JU1NJT05fRVhQSVJFRCA9IFwiNjAwNlwiLFxufVxuXG5leHBvcnQgZW51bSBBdHRyIHtcbiAgICBpZCA9IFwiaWRcIixcbiAgICBtZXNzYWdlID0gXCJtZXNzYWdlXCIsXG4gICAgZmlyZURhdGUgPSBcImZpcmVEYXRlXCIsXG4gICAgdGl0bGUgPSBcInRpdGxlXCIsXG4gICAgdGlja2VyID0gXCJ0aWNrZXJcIixcbiAgICBzaG93V2hlbiA9IFwic2hvd1doZW5cIixcbiAgICBhdXRvQ2FuY2VsID0gXCJhdXRvQ2FuY2VsXCIsXG4gICAgbGFyZ2VJY29uID0gXCJsYXJnZUljb25cIixcbiAgICBsYXJnZUljb25VcmwgPSBcImxhcmdlSWNvblVybFwiLFxuICAgIHNtYWxsSWNvbiA9IFwic21hbGxJY29uXCIsXG4gICAgYmlnVGV4dCA9IFwiYmlnVGV4dFwiLFxuICAgIHN1YlRleHQgPSBcInN1YlRleHRcIixcbiAgICBiaWdQaWN0dXJlVXJsID0gXCJiaWdQaWN0dXJlVXJsXCIsXG4gICAgc2hvcnRjdXRJZCA9IFwic2hvcnRjdXRJZFwiLFxuICAgIG51bWJlciA9IFwibnVtYmVyXCIsXG4gICAgY2hhbm5lbElkID0gXCJjaGFubmVsSWRcIixcbiAgICBjaGFubmVsTmFtZSA9IFwiY2hhbm5lbE5hbWVcIixcbiAgICBjaGFubmVsRGVzY3JpcHRpb24gPSBcImNoYW5uZWxEZXNjcmlwdGlvblwiLFxuICAgIGNvbG9yID0gXCJjb2xvclwiLFxuICAgIGdyb3VwID0gXCJncm91cFwiLFxuICAgIGdyb3VwU3VtbWFyeSA9IFwiZ3JvdXBTdW1tYXJ5XCIsXG4gICAgcGxheVNvdW5kID0gXCJwbGF5U291bmRcIixcbiAgICBzb3VuZE5hbWUgPSBcInNvdW5kTmFtZVwiLFxuICAgIHZpYnJhdGUgPSBcInZpYnJhdGVcIixcbiAgICB2aWJyYXRlRHVyYXRpb24gPSBcInZpYnJhdGVEdXJhdGlvblwiLFxuICAgIGFjdGlvbnMgPSBcImFjdGlvbnNcIixcbiAgICBpbnZva2VBcHAgPSBcImludm9rZUFwcFwiLFxuICAgIHRhZyA9IFwidGFnXCIsXG4gICAgcmVwZWF0VHlwZSA9IFwicmVwZWF0VHlwZVwiLFxuICAgIHJlcGVhdFRpbWUgPSBcInJlcGVhdFRpbWVcIixcbiAgICBvbmdvaW5nID0gXCJvbmdvaW5nXCIsXG4gICAgYWxsb3dXaGlsZUlkbGUgPSBcImFsbG93V2hpbGVJZGxlXCIsXG4gICAgZG9udE5vdGlmeUluRm9yZWdyb3VuZCA9IFwiZG9udE5vdGlmeUluRm9yZWdyb3VuZFwiLFxuICAgIHByaW9yaXR5ID0gXCJwcmlvcml0eVwiLFxuICAgIGltcG9ydGFuY2UgPSBcImltcG9ydGFuY2VcIixcbiAgICB2aXNpYmlsaXR5ID0gXCJ2aXNpYmlsaXR5XCIsXG4gICAgZGF0YSA9IFwiZGF0YVwiXG59XG5cbmV4cG9ydCBlbnVtIEltcG9ydGFuY2Uge1xuICAgIE1BWCA9IFwibWF4XCIsXG4gICAgSElHSCA9IFwiaGlnaFwiLFxuICAgIERFRkFVTFQgPSBcImRlZmF1bHRcIixcbiAgICBMT1cgPSBcImxvd1wiLFxuICAgIE1JTiA9IFwibWluXCIsXG4gICAgTk9ORSA9IFwibm9uZVwiLFxuICAgIFVOU1BFQ0lGSUVEID0gXCJ1bnNwZWNpZmllZFwiLFxufVxuXG5leHBvcnQgZW51bSBQcmlvcml0eSB7XG4gICAgTUFYID0gXCJtYXhcIixcbiAgICBISUdIID0gXCJoaWdoXCIsXG4gICAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxuICAgIExPVyA9IFwibG93XCIsXG4gICAgTUlOID0gXCJtaW5cIixcbn1cblxuZXhwb3J0IGVudW0gUmVwZWF0VHlwZSB7XG4gICAgSE9VUiA9IFwiaG91clwiLFxuICAgIE1JTlVURSA9IFwibWludXRlXCIsXG4gICAgREFZID0gXCJkYXlcIixcbiAgICBXRUVLID0gXCJ3ZWVrXCIsXG4gICAgQ1VTVE9NX1RJTUUgPSBcImN1c3RvbV90aW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIFZpc2liaWxpdHkge1xuICAgIFBVQkxJQyA9IFwicHVibGljXCIsXG4gICAgU0VDUkVUID0gXCJzZWNyZXRcIixcbiAgICBQUklWQVRFID0gXCJwcml2YXRlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZU1lc3NhZ2VCdWlsZGVyIHtcbiAgICBUTyA9IFwidG9cIixcbiAgICBNRVNTQUdFX0lEID0gXCJtZXNzYWdlSWRcIixcbiAgICBNRVNTQUdFX1RZUEUgPSBcIm1lc3NhZ2VUeXBlXCIsXG4gICAgVFRMID0gXCJ0dGxcIixcbiAgICBDT0xMQVBTRV9LRVkgPSBcImNvbGxhcHNlS2V5XCIsXG4gICAgUkVDRUlQVF9NT0RFID0gXCJyZWNlaXB0TW9kZVwiLFxuICAgIFNFTkRfTU9ERSA9IFwic2VuZE1vZGVcIixcbiAgICBEQVRBID0gXCJkYXRhXCIsXG59XG5cbmNsYXNzIENvcmRvdmFSZW1vdGVNZXNzYWdlIHtcbiAgICBzdGF0aWMgSU5TVEFOQ0VfSURfU0NPUEUgPSBcIkhDTVwiO1xuXG4gICAgc3RhdGljIFBSSU9SSVRZX1VOS05PV04gPSAwO1xuICAgIHN0YXRpYyBQUklPUklUWV9ISUdIID0gMTtcbiAgICBzdGF0aWMgUFJJT1JJVFlfTk9STUFMID0gMjtcblxuICAgIHN0YXRpYyBDT0xMQVBTRUtFWSA9IFwiY29sbGFwc2VLZXlcIjtcbiAgICBzdGF0aWMgREFUQSA9IFwiZGF0YVwiO1xuICAgIHN0YXRpYyBEQVRBT0ZNQVAgPSBcImRhdGFPZk1hcFwiO1xuICAgIHN0YXRpYyBNRVNTQUdFSUQgPSBcIm1lc3NhZ2VJZFwiO1xuICAgIHN0YXRpYyBNRVNTQUdFVFlQRSA9IFwibWVzc2FnZVR5cGVcIjtcbiAgICBzdGF0aWMgT1JJR0lOQUxVUkdFTkNZID0gXCJvcmlnaW5hbFVyZ2VuY3lcIjtcbiAgICBzdGF0aWMgVVJHRU5DWSA9IFwidXJnZW5jeVwiO1xuICAgIHN0YXRpYyBUVEwgPSBcInR0bFwiO1xuICAgIHN0YXRpYyBTRU5UVElNRSA9IFwic2VudFRpbWVcIjtcbiAgICBzdGF0aWMgVE8gPSBcInRvXCI7XG4gICAgc3RhdGljIEZST00gPSBcImZyb21cIjtcbiAgICBzdGF0aWMgVE9LRU4gPSBcInRva2VuXCI7XG4gICAgc3RhdGljIEFOQUxZVElDSU5GTyA9IFwiYW5hbHl0aWNJbmZvXCI7XG4gICAgc3RhdGljIEFOQUxZVElDSU5GT01BUCA9IFwiYW5hbHl0aWNJbmZvTWFwXCI7XG5cbiAgICBzdGF0aWMgTk9USUZJQ0FUSU9OID0ge1xuICAgICAgICBUSVRMRTogXCJ0aXRsZVwiLFxuICAgICAgICBUSVRMRUxPQ0FMSVpBVElPTktFWTogXCJ0aXRsZUxvY2FsaXphdGlvbktleVwiLFxuICAgICAgICBUSVRMRUxPQ0FMSVpBVElPTkFSR1M6IFwidGl0bGVMb2NhbGl6YXRpb25BcmdzXCIsXG4gICAgICAgIEJPRFlMT0NBTElaQVRJT05LRVk6IFwiYm9keUxvY2FsaXphdGlvbktleVwiLFxuICAgICAgICBCT0RZTE9DQUxJWkFUSU9OQVJHUzogXCJib2R5TG9jYWxpemF0aW9uQXJnc1wiLFxuICAgICAgICBCT0RZOiBcImJvZHlcIixcbiAgICAgICAgSUNPTjogXCJpY29uXCIsXG4gICAgICAgIFNPVU5EOiBcIlNvdW5kXCIsXG4gICAgICAgIFRBRzogXCJUYWdcIixcbiAgICAgICAgQ09MT1I6IFwiQ29sb3JcIixcbiAgICAgICAgQ0xJQ0tBQ1RJT046IFwiQ2xpY2tBY3Rpb25cIixcbiAgICAgICAgQ0hBTk5FTElEOiBcIkNoYW5uZWxJZFwiLFxuICAgICAgICBJTUFHRVVSTDogXCJJbWFnZVVybFwiLFxuICAgICAgICBMSU5LOiBcIkxpbmtcIixcbiAgICAgICAgTk9USUZZSUQ6IFwiTm90aWZ5SWRcIixcbiAgICAgICAgV0hFTjogXCJXaGVuXCIsXG4gICAgICAgIExJR0hUU0VUVElOR1M6IFwiTGlnaHRTZXR0aW5nc1wiLFxuICAgICAgICBCQURHRU5VTUJFUjogXCJCYWRnZU51bWJlclwiLFxuICAgICAgICBJTVBPUlRBTkNFOiBcIkltcG9ydGFuY2VcIixcbiAgICAgICAgVElDS0VSOiBcIlRpY2tlclwiLFxuICAgICAgICBWSUJSQVRFQ09ORklHOiBcInZpYnJhdGVDb25maWdcIixcbiAgICAgICAgVklTSUJJTElUWTogXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIElOVEVOVFVSSTogXCJpbnRlbnRVcmlcIixcbiAgICAgICAgSVNBVVRPQ0FOQ0VMOiBcImlzQXV0b0NhbmNlbFwiLFxuICAgICAgICBJU0xPQ0FMT05MWTogXCJpc0xvY2FsT25seVwiLFxuICAgICAgICBJU0RFRkFVTFRMSUdIVDogXCJpc0RlZmF1bHRMaWdodFwiLFxuICAgICAgICBJU0RFRkFVTFRTT1VORDogXCJpc0RlZmF1bHRTb3VuZFwiLFxuICAgICAgICBJU0RFRkFVTFRWSUJSQVRFOiBcImlzRGVmYXVsdFZpYnJhdGVcIixcbiAgICB9O1xuICAgIHJlbW90ZU1zZzogYW55O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMucmVtb3RlTXNnID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIHBhcnNlIGFsbCBlbGVtZW50LHVub3JkZXJlZFxuICAgICAqL1xuICAgIHBhcnNlTXNnQWxsQXR0cmlidXRlKCkge1xuICAgICAgICBsZXQgcHVzaFJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVtb3RlTXNnKSB7XG4gICAgICAgICAgICBwdXNoUmVzdWx0ID0gcHVzaFJlc3VsdCArIGtleSArIFwiIDogXCIgKyB0aGlzLnJlbW90ZU1zZ1trZXldICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHVzaFJlc3VsdDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldENvbGxhcHNlS2V5KCkgT2J0YWlucyB0aGUgY2xhc3NpZmljYXRpb24gaWRlbnRpZmllciAoY29sbGFwc2Uga2V5KSBvZiBhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgZ2V0Q29sbGFwc2VLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5DT0xMQVBTRUtFWV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBnZXREYXRhKCkgT2J0YWlucyB2YWxpZCBjb250ZW50IGRhdGEgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5EQVRBXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldERhdGFPZk1hcCgpIGEgbWVzc2FnZSBtYXAuXG4gICAgICovXG4gICAgZ2V0RGF0YU9mTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuREFUQU9GTUFQXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldE1lc3NhZ2VJZCgpIE9idGFpbnMgdGhlIElEIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5NRVNTQUdFSURdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0TWVzc2FnZVR5cGUoKSBPYnRhaW5zIHRoZSB0eXBlIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk1FU1NBR0VUWVBFXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldE9yaWdpbmFsVXJnZW5jeSgpIE9idGFpbnMgdGhlIG9yaWdpbmFsIHByaW9yaXR5IG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRPcmlnaW5hbFVyZ2VuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5PUklHSU5BTFVSR0VOQ1ldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VXJnZW5jeSgpIE9idGFpbnMgcHJpb3JpdHkgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldFVyZ2VuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5VUkdFTkNZXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIGdldFR0bCgpIE9idGFpbnMgdmFsaWQgZ2V0VHRsIG9mIGEgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBnZXRUdGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UVExdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0U2VudFRpbWUoKSBPYnRhaW5zIHRoZSB0aW1lIHdoZW4gYSBtZXNzYWdlIGlzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIGdldFNlbnRUaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuU0VOVFRJTUVdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VG8oKSBPYnRhaW5zIHRoZSByZWNpcGllbnQgb2YgYSBtZXNzYWdlLlxuICAgICAqL1xuICAgIGdldFRvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuVE9dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0RnJvbSgpIE9idGFpbnMgdGhlIHNlbmRlciBvZiBhIG1lc3NhZ2UuXG4gICAgICovXG4gICAgZ2V0RnJvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLkZST01dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogZ2V0VG9rZW4oKSBPYnRhaW5zIHZhbGlkIHRva2VuXG4gICAgICovXG4gICAgZ2V0VG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UT0tFTl07XG4gICAgfVxuXG4gICAgZ2V0QW5hbHl0aWNJbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuQU5BTFlUSUNJTkZPXTtcbiAgICB9XG5cbiAgICBnZXRBbmFseXRpY0luZm9NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5BTkFMWVRJQ0lORk9NQVBdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlKCkgT2J0YWlucyB0aGUgdGl0bGUgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Tm90aWZpY2F0aW9uVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlTG9jYWxpemF0aW9uS2V5KCkgT2J0YWlucyB0aGUga2V5IG9mIHRoZSBkaXNwbGF5ZWQgdGl0bGUgb2YgYSBub3RpZmljYXRpb24gbWVzc2FnZVxuICAgICAqL1xuICAgIGdldFRpdGxlTG9jYWxpemF0aW9uS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVMT0NBTElaQVRJT05LRVlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRUaXRsZUxvY2FsaXphdGlvbkFyZ3MoKSBPYnRhaW5zIHZhcmlhYmxlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3BsYXllZCB0aXRsZSBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRUaXRsZUxvY2FsaXphdGlvbkFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tcbiAgICAgICAgICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5USVRMRUxPQ0FMSVpBVElPTkFSR1NcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCb2R5TG9jYWxpemF0aW9uS2V5KCkgT2J0YWlucyB0aGUga2V5IG9mIHRoZSBkaXNwbGF5ZWQgY29udGVudCBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQk9EWUxPQ0FMSVpBVElPTktFWVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEJvZHlMb2NhbGl6YXRpb25BcmdzKCkgT2J0YWlucyB2YXJpYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXNwbGF5ZWQgY29udGVudCBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uQXJncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xuICAgICAgICAgICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJPRFlMT0NBTElaQVRJT05BUkdTXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Qm9keSgpIE9idGFpbnMgdGhlIGJvZHkgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Qm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5CT0RZXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJY29uKCkgT2J0YWlucyB0aGUgaWNvbiBvZiBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklDT05dO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFNvdW5kKCkgT2J0YWlucyB0aGUgc291bmQgZnJvbSBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRTb3VuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5TT1VORF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGFnKCkgT2J0YWlucyB0aGUgdGFnIGZyb20gYSBtZXNzYWdlIGZvciBtZXNzYWdlIG92ZXJ3cml0aW5nXG4gICAgICovXG4gICAgZ2V0VGFnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlRBR107XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q29sb3IoKSBPYnRhaW5zIHRoZSBjb2xvcnMgb2YgaWNvbnMgaW4gYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQ09MT1JdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldENsaWNrQWN0aW9uKCkgT2J0YWlucyBhY3Rpb25zIHRyaWdnZXJlZCBieSBtZXNzYWdlIHRhcHBpbmdcbiAgICAgKi9cbiAgICBnZXRDbGlja0FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5DTElDS0FDVElPTl07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Q2hhbm5lbElkKCkgT2J0YWlucyBJRHMgb2YgY2hhbm5lbHMgdGhhdCBzdXBwb3J0IHRoZSBkaXNwbGF5IG9mIG1lc3NhZ2VzXG4gICAgICovXG4gICAgZ2V0Q2hhbm5lbElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkNIQU5ORUxJRF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW1hZ2VVcmwoKSBPYnRhaW5zIHRoZSBpbWFnZSBVUkwgZnJvbSBhIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBnZXRJbWFnZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JTUFHRVVSTF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGluaygpIE9idGFpbnMgdGhlIFVSTCB0byBiZSBhY2Nlc3NlZCBmcm9tIGEgbWVzc2FnZVxuICAgICAqL1xuICAgIGdldExpbmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uTElOS107XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Tm90aWZ5SWQoKSBPYnRhaW5zIHRoZSB1bmlxdWUgSUQgb2YgYSBtZXNzYWdlXG4gICAgICovXG4gICAgZ2V0Tm90aWZ5SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uTk9USUZZSURdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFdoZW4oKVxuICAgICAqL1xuICAgIGdldFdoZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uV0hFTl07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGlnaHRTZXR0aW5ncygpXG4gICAgICovXG4gICAgZ2V0TGlnaHRTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5MSUdIVFNFVFRJTkdTXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCYWRnZU51bWJlcigpXG4gICAgICovXG4gICAgZ2V0QmFkZ2VOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQkFER0VOVU1CRVJdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEltcG9ydGFuY2UoKVxuICAgICAqL1xuICAgIGdldEltcG9ydGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU1QT1JUQU5DRV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGlja2VyKClcbiAgICAgKi9cbiAgICBnZXRUaWNrZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElDS0VSXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRWaWJyYXRlQ29uZmlnKClcbiAgICAgKi9cbiAgICBnZXRWaWJyYXRlQ29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlZJQlJBVEVDT05GSUddO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldFZpc2liaWxpdHkoKVxuICAgICAqL1xuICAgIGdldFZpc2liaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVklTSUJJTElUWV07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW50ZW50VXJpKClcbiAgICAgKi9cbiAgICBnZXRJbnRlbnRVcmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU5URU5UVVJJXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjppc0F1dG9DYW5jZWwoKVxuICAgICAqL1xuICAgIGlzQXV0b0NhbmNlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0FVVE9DQU5DRUxdO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmdldEludGVudFVyaSgpXG4gICAgICovXG4gICAgaXNMb2NhbE9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNMT0NBTE9OTFldO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTm90aWZpY2F0aW9uOmlzRGVmYXVsdExpZ2h0KClcbiAgICAgKi9cbiAgICBpc0RlZmF1bHRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0RFRkFVTFRMSUdIVF07XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBOb3RpZmljYXRpb246aXNEZWZhdWx0U291bmQoKVxuICAgICAqL1xuICAgIGlzRGVmYXVsdFNvdW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklTREVGQVVMVFNPVU5EXTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5vdGlmaWNhdGlvbjppc0RlZmF1bHRWaWJyYXRlKClcbiAgICAgKi9cbiAgICBpc0RlZmF1bHRWaWJyYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNERUZBVUxUVklCUkFURVxuICAgICAgICBdO1xuICAgIH1cbn1cblxudHlwZSBMb2NhbE5vdGlmaWNhdGlvbk9iamVjdCA9IHtcbiAgICBba2V5IGluIEF0dHJdPzogYW55O1xufTtcblxudHlwZSBSZW1vdGVNZXNzYWdlT2JqZWN0ID0ge1xuICAgIFtrZXkgaW4gUmVtb3RlTWVzc2FnZUJ1aWxkZXJdPzogYW55O1xufTtcblxuaW50ZXJmYWNlIElkVGFnIHtcblx0aWQ6bnVtYmVyLFxuXHR0YWc6c3RyaW5nXG59Il19
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvbmF0aXZlL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sdUNBQStDLE1BQU0sK0JBQStCLENBQUM7OztJQVUvRCwyQkFBMEI7OztRQUNuRCx1QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUN0QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QywwQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM1Qyx5QkFBbUIsR0FBRyxLQUFLLENBQUM7OztJQUU1Qjs7O09BR0c7SUFDSCxzQkFBSTtJQUtKLDhCQUFZO0lBS1osK0JBQWE7SUFLYjs7O09BR0c7SUFDSCw0QkFBVTtJQUtWOzs7T0FHRztJQUNILDZCQUFXO0lBS1g7OztPQUdHO0lBQ0gsdUJBQUs7SUFLTDs7O09BR0c7SUFDSCx5QkFBTztJQUtQOzs7O09BSUc7SUFDSCwwQkFBUSxhQUFDLEtBQWM7SUFLdkI7Ozs7T0FJRztJQUNILHVDQUFxQixhQUFDLFNBQWlCO0lBS3ZDOzs7T0FHRztJQUNILGlDQUFlO0lBS2Y7OztPQUdHO0lBQ0gsNEJBQVU7SUFLVjs7OztPQUlHO0lBQ0gsNkJBQVcsYUFBQyxLQUFjO0lBSzFCOzs7O09BSUc7SUFDSCwwQ0FBd0IsYUFBQyxTQUFpQjtJQUsxQzs7OztPQUlHO0lBQ0gsMkJBQVMsYUFBQyxLQUFhO0lBS3ZCOzs7O09BSUc7SUFDSCw2QkFBVyxhQUFDLEtBQWE7SUFLekI7Ozs7T0FJRztJQUNILG9DQUFrQixhQUFDLE9BQWdCO0lBS25DLHlCQUFPO0lBS1A7OztPQUdHO0lBQ0gsbUNBQWlCO0lBS2pCLHdDQUFzQjtJQUt0QixtQ0FBaUIsYUFBQyxhQUFrQztJ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O1FBQzFDLG9CQUFvQixFQUFFLHNCQUFzQjtRQUM1QyxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE9BQU87UUFDZCxHQUFHLEVBQUUsS0FBSztRQUNWLEtBQUssRUFBRSxPQUFPO1FBQ2QsV0FBVyxFQUFFLGFBQWE7UUFDMUIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsVUFBVTtRQUNwQixJQUFJLEVBQUUsTUFBTTtRQUNaLGFBQWEsRUFBRSxlQUFlO1FBQzlCLFdBQVcsRUFBRSxhQUFhO1FBQzFCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLGFBQWEsRUFBRSxlQUFlO1FBQzlCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFdBQVcsRUFBRSxhQUFhO1FBQzFCLGNBQWMsRUFBRSxnQkFBZ0I7UUFDaEMsY0FBYyxFQUFFLGdCQUFnQjtRQUNoQyxnQkFBZ0IsRUFBRSxrQkFBa0I7S0FDdkMsQ0FBQzsrQkFyc0JOOztTQWtwQk0sb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICAgIENvcHlyaWdodCAyMDIwLTIwMjQuIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKVxyXG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcblxyXG4gICAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFBsdWdpbiwgQ29yZG92YSwgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4gfSBmcm9tIFwiQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2NvcmVcIjtcclxuXHJcbkBQbHVnaW4oe1xyXG4gICAgcGx1Z2luTmFtZTogXCJIbXNQdXNoXCIsXHJcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcclxuICAgIHBsdWdpblJlZjogXCJIbXNQdXNoXCIsXHJcbiAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcclxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSxcclxufSlcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSG1zUHVzaCBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcclxuICAgIEhtc1B1c2hSZXN1bHRDb2RlID0gSG1zUHVzaFJlc3VsdENvZGU7XHJcbiAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZSA9IENvcmRvdmFSZW1vdGVNZXNzYWdlO1xyXG4gICAgUmVtb3RlTWVzc2FnZUJ1aWxkZXIgPSBSZW1vdGVNZXNzYWdlQnVpbGRlcjtcclxuICAgIERFRkFVTFRfVE9LRU5fU0NPUEUgPSBcIkhDTVwiO1xyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgIGluaXRpYWxpemVkIEhtc1B1c2guXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XHJcbiAgICAgKi9cclxuICAgIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBlbmFibGVMb2dnZXIoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBkaXNhYmxlTG9nZ2VyKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIGRpc3BsYXkgb2Ygbm90aWZpY2F0aW9uIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyBpbiBhbiBhcHAsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZC4gVGhpcyBtZXRob2QgYXBwbGllcyB0byBub3RpZmljYXRpb24gbWVzc2FnZXMgYnV0IG5vdCBkYXRhIG1lc3NhZ2VzLiBJdCBpcyB0aGUgYXBwIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIGRhdGEgbWVzc2FnaW5nLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIHR1cm5PblB1c2goKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBkaXNwbGF5IG9mIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgZGlzcGxheSBvZiBub3RpZmljYXRpb24gbWVzc2FnZXMgaW4gYW4gYXBwLCB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2QuIFRoaXMgbWV0aG9kIGFwcGxpZXMgdG8gbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGJ1dCBub3QgZGF0YSBtZXNzYWdlcy4gSXQgaXMgdGhlIGFwcCB0aGF0IGRldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSBkYXRhIG1lc3NhZ2luZy5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICovXHJcbiAgICB0dXJuT2ZmUHVzaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gYW4gQUFJRCBpbiBzeW5jaHJvbm91cyBtb2RlLiBCZWZvcmUgYXBwbHlpbmcgZm9yIGEgdG9rZW4sIGFuIGFwcCBjYWxscyB0aGlzIG1ldGhvZCB0byBvYnRhaW4gaXRzIHVuaXF1ZSBBQUlELiBUaGUgSFVBV0VJIFB1c2ggc2VydmVyIGdlbmVyYXRlcyBhIHRva2VuIGZvciB0aGUgYXBwIGJhc2VkIG9uIHRoZSBBQUlELiBJZiB0aGUgQUFJRCBvZiB0aGUgYXBwIGNoYW5nZXMsIGEgbmV3IHRva2VuIHdpbGwgYmUgZ2VuZXJhdGVkIG5leHQgdGltZSB3aGVuIHRoZSBhcHAgYXBwbGllcyBmb3IgYSB0b2tlbi4gSWYgYW4gYXBwIG5lZWRzIHRvIHJlcG9ydCBzdGF0aXN0aWNzIGV2ZW50cywgaXQgbXVzdCBjYXJyeSB0aGUgQUFJRCBhcyBpdHMgdW5pcXVlIElELlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIGdldElkKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb2J0YWluIGFuIEFBSUQgaW4gYXN5bmNocm9ub3VzIG1vZGUuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgZ2V0QUFJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG9idGFpbiBhIHRva2VuIHJlcXVpcmVkIGZvciBhY2Nlc3NpbmcgSFVBV0VJIFB1c2ggS2l0LiBJZiB0aGVyZSBpcyBubyBsb2NhbCBBQUlELCB0aGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYW4gQUFJRCB3aGVuIGl0IGlzIGNhbGxlZCBiZWNhdXNlIHRoZSBIVUFXRUkgUHVzaCBLaXQgc2VydmVyIG5lZWRzIHRvIGdlbmVyYXRlIGEgdG9rZW4gYmFzZWQgb24gdGhlIEFBSUQuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqIEBwYXJhbXMgc2NvcGUgPyA6IFN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRUb2tlbihzY29wZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIE9idGFpbnMgYSB0b2tlbiB0aGF0IGEgdGFyZ2V0IGFwcCBkZXZlbG9wZXIgYXBwbGllcyBmb3IgYSBzZW5kZXIgdG8gaW50ZWdyYXRlIFB1c2ggS2l0IGluIHRoZSBtdWx0aS1zZW5kZXIgc2NlbmFyaW8uXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqIEBwYXJhbXMgc3ViamVjdElkID8gOiBTdHJpbmdcclxuICAgICAqL1xyXG4gICAgZ2V0VG9rZW5XaXRoU3ViamVjdElkKHN1YmplY3RJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvYnRhaW4gdGhlIGdlbmVyYXRpb24gdGltZXN0YW1wIG9mIGFuIEFBSUQuXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgZ2V0Q3JlYXRpb25UaW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGVsZXRlIGEgbG9jYWwgQUFJRCBhbmQgaXRzIGdlbmVyYXRpb24gdGltZXN0YW1wLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZUFBSUQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGVsZXRlIGEgdG9rZW4uIEFmdGVyIGEgdG9rZW4gaXMgZGVsZXRlZCwgdGhlIGNvcnJlc3BvbmRpbmcgQUFJRCB3aWxsIG5vdCBiZSBkZWxldGVkLiBUaGlzIG1ldGhvZCBpcyBhIHN5bmNocm9ub3VzIG1ldGhvZC5cclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8c3RyaW5nPlxyXG4gICAgICogQHBhcmFtcyBzY29wZSA/IDogU3RyaW5nXHJcbiAgICAgKi9cclxuICAgIGRlbGV0ZVRva2VuKHNjb3BlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZXMgYSB0b2tlbiB0aGF0IGEgdGFyZ2V0IGFwcCBkZXZlbG9wZXIgYXBwbGllcyBmb3IgYSBzZW5kZXIgdG8gaW50ZWdyYXRlIFB1c2ggS2l0IGluIHRoZSBtdWx0aS1zZW5kZXIgc2NlbmFyaW8uXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqIEBwYXJhbXMgc3ViamVjdElkID8gOiBTdHJpbmdcclxuICAgICAqL1xyXG4gICAgZGVsZXRlVG9rZW5XaXRoU3ViamVjdElkKHN1YmplY3RJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzdWJzY3JpYmUgdG8gdG9waWNzIGluIGFzeW5jaHJvbm91cyBtb2RlLiBUaGUgSFVBV0VJIFB1c2ggS2l0IHRvcGljIG1lc3NhZ2luZyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNlbmQgbWVzc2FnZXMgdG8gbXVsdGlwbGUgZGV2aWNlcyB3aG9zZSB1c2VycyBoYXZlIHN1YnNjcmliZWQgdG8gYSBzcGVjaWZpYyB0b3BpYy4gWW91IGNhbiB3cml0ZSBtZXNzYWdlcyBhYm91dCB0aGUgdG9waWMgYXMgcmVxdWlyZWQsIGFuZCBIVUFXRUkgUHVzaCBLaXQgZGV0ZXJtaW5lcyB0aGUgcmVsZWFzZSBwYXRoIGFuZCBzZW5kcyBtZXNzYWdlcyB0byB0aGUgY29ycmVjdCBkZXZpY2VzIGluIGEgcmVsaWFibGUgbWFubmVyLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRvcGljIFRvcGljIHRvIGJlIHN1YnNjcmliZWQgdG8uXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPHN0cmluZz5cclxuICAgICAqL1xyXG4gICAgc3Vic2NyaWJlKHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIHRvcGljcyB0aGF0IGFyZSBzdWJzY3JpYmVkIHRvIHRocm91Z2ggdGhlIHN1YnNjcmliZSBtZXRob2QuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWMgVG9waWMgdG8gYmUgdW5zdWJzY3JpYmVkIHRvLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIHVuc3Vic2NyaWJlKHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRvIGVuYWJsZSBhdXRvbWF0aWMgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBlbmFibGUgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlLCB0aGUgU0RLIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGFuIEFBSUQgYW5kIGFwcGxpZXMgZm9yIGEgdG9rZW4uXHJcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgSW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgc2V0QXV0b0luaXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGdldE9kaWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayB3aGV0aGVyIGF1dG9tYXRpYyBpbml0aWFsaXphdGlvbiBpcyBlbmFibGVkLlxyXG4gICAgICogQHJldHVybnMgUHJvbWlzZTxzdHJpbmc+XHJcbiAgICAgKi9cclxuICAgIGlzQXV0b0luaXRFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0SW5pdGlhbE5vdGlmaWNhdGlvbigpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgc2VuZFJlbW90ZU1lc3NhZ2UocmVtb3RlTWVzc2FnZTogUmVtb3RlTWVzc2FnZU9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgc2V0QmFja2dyb3VuZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICByZW1vdmVCYWNrZ3JvdW5kRmlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cclxuXHJcbkBQbHVnaW4oe1xyXG4gICAgcGx1Z2luTmFtZTogXCJIbXNMb2NhbE5vdGlmaWNhdGlvblwiLFxyXG4gICAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXHJcbiAgICBwbHVnaW5SZWY6IFwiSG1zTG9jYWxOb3RpZmljYXRpb25cIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIbXNMb2NhbE5vdGlmaWNhdGlvbiBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcclxuICAgIEF0dHIgPSBBdHRyO1xyXG4gICAgSW1wb3J0YW5jZSA9IEltcG9ydGFuY2U7XHJcbiAgICBQcmlvcml0eSA9IFByaW9yaXR5O1xyXG4gICAgUmVwZWF0VHlwZSA9IFJlcGVhdFR5cGU7XHJcbiAgICBWaXNpYmlsaXR5ID0gVmlzaWJpbGl0eTtcclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgbG9jYWxOb3RpZmljYXRpb24oXHJcbiAgICAgICAgbG9jYWxOb3RpZmljYXRpb246IExvY2FsTm90aWZpY2F0aW9uT2JqZWN0XHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgbG9jYWxOb3RpZmljYXRpb25TY2hlZHVsZShcclxuICAgICAgICBsb2NhbE5vdGlmaWNhdGlvbjogTG9jYWxOb3RpZmljYXRpb25PYmplY3RcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjYW5jZWxBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY2FuY2VsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNhbmNlbFNjaGVkdWxlZE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjYW5jZWxOb3RpZmljYXRpb25zV2l0aElkKGlkOiBudW1iZXJbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhJZFRhZyhpZFRhZzogSWRUYWdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY2FuY2VsTm90aWZpY2F0aW9uc1dpdGhUYWcodGFnOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGdldE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGdldFNjaGVkdWxlZE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGdldENoYW5uZWxzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjaGFubmVsRXhpc3RzKGNoYW5uZWxJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBjaGFubmVsQmxvY2tlZChjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxufVxyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhtc1B1c2hFdmVudFwiLFxyXG4gICAgcGx1Z2luOiBcIkBobXNjb3JlL2NvcmRvdmEtcGx1Z2luLWhtcy1wdXNoXCIsXHJcbiAgICBwbHVnaW5SZWY6IFwiSG1zUHVzaEV2ZW50XCIsXHJcbiAgICByZXBvOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9ITVMtQ29yZS9obXMtY29yZG92YS1wbHVnaW5cIixcclxuICAgIHBsYXRmb3JtczogW1wiQW5kcm9pZFwiXSxcclxufSlcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSG1zUHVzaEV2ZW50IGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uUmVtb3RlTWVzc2FnZVJlY2VpdmVkKGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvblRva2VuUmVjZWl2ZWQoY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uVG9rZW5FcnJvcihjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25QdXNoTWVzc2FnZVNlbnQoY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uUHVzaE1lc3NhZ2VTZW50RXJyb3IoY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIG9uUHVzaE1lc3NhZ2VTZW50RGVsaXZlcmVkKGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvbkxvY2FsTm90aWZpY2F0aW9uQWN0aW9uKGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBvbk5vdGlmaWNhdGlvbk9wZW5lZEFwcChjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25NdWx0aVNlbmRlclRva2VuUmVjZWl2ZWRFdmVudChjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgb25NdWx0aVNlbmRlclRva2VuRXJyb3JFdmVudChjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBSRU1PVEVfREFUQV9NRVNTQUdFX1JFQ0VJVkVEID0gXCJSRU1PVEVfREFUQV9NRVNTQUdFX1JFQ0VJVkVEXCI7XHJcbiAgICBUT0tFTl9SRUNFSVZFRF9FVkVOVCA9IFwiVE9LRU5fUkVDRUlWRURfRVZFTlRcIjtcclxuICAgIE9OX1RPS0VOX0VSUk9SX0VWRU5UID0gXCJPTl9UT0tFTl9FUlJPUl9FVkVOVFwiO1xyXG4gICAgTk9USUZJQ0FUSU9OX09QRU5FRF9FVkVOVCA9IFwiTk9USUZJQ0FUSU9OX09QRU5FRF9FVkVOVFwiO1xyXG4gICAgTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVCA9IFwiTE9DQUxfTk9USUZJQ0FUSU9OX0FDVElPTl9FVkVOVFwiO1xyXG4gICAgT05fUFVTSF9NRVNTQUdFX1NFTlQgPSBcIk9OX1BVU0hfTUVTU0FHRV9TRU5UXCI7XHJcbiAgICBPTl9QVVNIX01FU1NBR0VfU0VOVF9FUlJPUiA9IFwiT05fUFVTSF9NRVNTQUdFX1NFTlRfRVJST1JcIjtcclxuICAgIE9OX1BVU0hfTUVTU0FHRV9TRU5UX0RFTElWRVJFRCA9IFwiT05fUFVTSF9NRVNTQUdFX1NFTlRfREVMSVZFUkVEXCI7XHJcbiAgICBPTl9NVUxUSV9TRU5ERVJfVE9LRU5fRVJST1JfRVZFTlQgPSBcIk9OX01VTFRJX1NFTkRFUl9UT0tFTl9FUlJPUl9FVkVOVFwiO1xyXG4gICAgT05fTVVMVElfU0VOREVSX1RPS0VOX1JFQ0VJVkVEX0VWRU5UID0gXCJPTl9NVUxUSV9TRU5ERVJfVE9LRU5fUkVDRUlWRURfRVZFTlRcIjtcclxufVxyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhtc1B1c2hQcm9maWxlXCIsXHJcbiAgICBwbHVnaW46IFwiQGhtc2NvcmUvY29yZG92YS1wbHVnaW4taG1zLXB1c2hcIixcclxuICAgIHBsdWdpblJlZjogXCJIbXNQdXNoUHJvZmlsZVwiLFxyXG4gICAgcmVwbzogXCJodHRwczovL2dpdGh1Yi5jb20vSE1TLUNvcmUvaG1zLWNvcmRvdmEtcGx1Z2luXCIsXHJcbiAgICBwbGF0Zm9ybXM6IFtcIkFuZHJvaWRcIl0sXHJcbn0pXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEhtc1B1c2hQcm9maWxlIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xyXG4gICAgSFVBV0VJX1BST0ZJTEUgPSAxO1xyXG4gICAgQ1VTVE9NX1BST0ZJTEUgPSAyO1xyXG4gICAgVU5ERUZJTkVEX1BST0ZJTEUgPSAtMTtcclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBpc1N1cHBvcnRQcm9maWxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgYWRkUHJvZmlsZSh0eXBlOiBudW1iZXIsIHByb2ZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGFkZFByb2ZpbGVXaXRoU3ViamVjdElkKFxyXG4gICAgICAgIHN1YmplY3RJZDogc3RyaW5nLFxyXG4gICAgICAgIHR5cGU6IG51bWJlcixcclxuICAgICAgICBwcm9maWxlSWQ6IHN0cmluZ1xyXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGRlbGV0ZVByb2ZpbGUocHJvZmlsZUlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZGVsZXRlUHJvZmlsZVdpdGhTdWJqZWN0SWQoXHJcbiAgICAgICAgc3ViamVjdElkOiBzdHJpbmcsXHJcbiAgICAgICAgcHJvZmlsZUlkOiBzdHJpbmdcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBIbXNQdXNoUmVzdWx0Q29kZSB7XHJcbiAgICAvLyBTdWNjZXNzXHJcbiAgICBTVUNDRVNTID0gXCIwXCIsXHJcblxyXG4gICAgLy8gRXJyb3JcclxuICAgIEVSUk9SID0gXCItMVwiLFxyXG5cclxuICAgIC8vIEJ1bmRsZSBpcyBudWxsLCBleGNlcHRpb25cclxuICAgIE5VTExfQlVORExFID0gXCIzMzNcIixcclxuXHJcbiAgICAvLyBZb3UgZG8gbm90IGhhdmUgYSB0b2tlbi4gQXBwbHkgZm9yIGEgdG9rZW4uXHJcbiAgICBFUlJPUl9OT19UT0tFTiA9IFwiOTA3MTIyMDMwXCIsXHJcblxyXG4gICAgLy8gVGhlIGN1cnJlbnQgbmV0d29yayBpcyB1bmF2YWlsYWJsZS4gQ2hlY2sgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi5cclxuICAgIEVSUk9SX05PX05FVFdPUksgPSBcIjkwNzEyMjAzMVwiLFxyXG5cclxuICAgIC8vIFRoZSB0b2tlbiBoYXMgZXhwaXJlZC4gRGVsZXRlIHRoZSB0b2tlbiBhbmQgYXBwbHkgZm9yIGEgbmV3IG9uZS5cclxuICAgIEVSUk9SX1RPS0VOX0lOVkFMSUQgPSBcIjkwNzEyMjAzMlwiLFxyXG5cclxuICAgIC8vIElmIHRoZSBQdXNoIHNlcnZpY2UgaXMgdW5hdmFpbGFibGUsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxyXG4gICAgRVJST1JfU0VSVklDRV9OT1RfQVZBSUxBQkxFID0gXCI5MDcxMjIwNDZcIixcclxuXHJcbiAgICAvLyBJZiB0aGUgUHVzaCBzZXJ2ZXIgcmV0dXJucyBhbiBlcnJvciwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9QVVNIX1NFUlZFUiA9IFwiOTA3MTIyMDQ3XCIsXHJcblxyXG4gICAgLy8gVW5rbm93biBlcnJvci4gQ29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9VTktOT1dOID0gXCI5MDcxMjIwNDVcIixcclxuXHJcbiAgICAvLyBUaGUgbnVtYmVyIG9mIHN1YnNjcmliZWQgdG9waWNzIGV4Y2VlZHMgMjAwMC5cclxuICAgIEVSUk9SX1RPUElDX0VYQ0VFRCA9IFwiOTA3MTIyMDM0XCIsXHJcblxyXG4gICAgLy8gRmFpbGVkIHRvIHNlbmQgdGhlIHN1YnNjcmlwdGlvbiB0b3BpYy4gQ29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9UT1BJQ19TRU5EID0gXCI5MDcxMjIwMzVcIixcclxuXHJcbiAgICAvLyBQdXNoIHJpZ2h0cyBhcmUgbm90IGVuYWJsZWQuIEVuYWJsZSB0aGUgc2VydmljZSBhbmQgc2V0IHB1c2ggc2VydmljZSBwYXJhbWV0ZXJzIGF0IEFwcEdhbGxlcnkgQ29ubmVjdC5cclxuICAgIEVSUk9SX05PX1JJR0hUID0gXCI5MDcxMjIwMzZcIixcclxuXHJcbiAgICAvLyBGYWlsZWQgdG8gYXBwbHkgZm9yIHRoZSB0b2tlbi4gQ29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICBFUlJPUl9HRVRfVE9LRU5fRVJSID0gXCI5MDcxMjIwMzdcIixcclxuXHJcbiAgICAvLyBObyBzdG9yYWdlIGxvY2F0aW9uIGlzIHNlbGVjdGVkIGZvciB0aGUgYXBwbGljYXRpb24gb3IgdGhlIHN0b3JhZ2UgbG9jYXRpb24gaXMgaW52YWxpZC5cclxuICAgIEVSUk9SX1NUT1JBR0VfTE9DQVRJT05fRU1QVFkgPSBcIjkwNzEyMjAzOFwiLFxyXG5cclxuICAgIC8vIEZhaWxlZCB0byBhcHBseSBmb3IgYSB0b2tlbi4gQ3Jvc3MtcmVnaW9uIHRva2VuIGFwcGxpY2F0aW9uIGlzIG5vdCBhbGxvd2VkLlxyXG4gICAgRVJST1JfTk9UX0FMTE9XX0NST1NTX0FQUExZID0gXCI5MDcxMjIwNTNcIixcclxuXHJcbiAgICAvLyBUaGUgbWVzc2FnZSBib2R5IHNpemUgZXhjZWVkcyB0aGUgbWF4aW11bS5cclxuICAgIEVSUk9SX1NJWkUgPSBcIjkwNzEyMjA0MVwiLFxyXG5cclxuICAgIC8vIFRoZSBtZXNzYWdlIGNvbnRhaW5zIGludmFsaWQgcGFyYW1ldGVycy5cclxuICAgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSUyA9IFwiOTA3MTIyMDQyXCIsXHJcblxyXG4gICAgLy8gVGhlIG51bWJlciBvZiBzZW50IG1lc3NhZ2VzIHJlYWNoZXMgdGhlIHVwcGVyIGxpbWl0LiBUaGUgbWVzc2FnZXMgd2lsbCBiZSBkaXNjYXJkZWQuXHJcbiAgICBFUlJPUl9UT09fTUFOWV9NRVNTQUdFUyA9IFwiOTA3MTIyMDQzXCIsXHJcblxyXG4gICAgLy8gVGhlIG1lc3NhZ2UgbGlmZXRpbWUgZXhwaXJlcyBiZWZvcmUgdGhlIG1lc3NhZ2UgaXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIEFQUCBzZXJ2ZXIuXHJcbiAgICBFUlJPUl9UVExfRVhDRUVERUQgPSBcIjkwNzEyMjA0NFwiLFxyXG5cclxuICAgIC8vICBIdWF3ZWkgTW9iaWxlIFNlcnZpY2VzIChBUEspIGNhbid0IGNvbm5lY3QgIEh1YXdlaSBQdXNoICBLaXQuXHJcbiAgICBFUlJPUl9ITVNfQ0xJRU5UX0FQSSA9IFwiOTA3MTIyMDQ4XCIsXHJcblxyXG4gICAgLy8gVGhlIGN1cnJlbnQgRU1VSSB2ZXJzaW9uIGlzIHRvbyBlYXJseSB0byB1c2UgdGhlIGNhcGFiaWxpdHkuXHJcbiAgICBFUlJPUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRCA9IFwiOTA3MTIyMDQ5XCIsXHJcblxyXG4gICAgLy8gVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIGluIHRoZSBtYWluIHRocmVhZC5cclxuICAgIEVSUk9SX01BSU5fVEhSRUFEID0gXCI5MDcxMjIwNTBcIixcclxuXHJcbiAgICAvLyBUaGUgZGV2aWNlIGNlcnRpZmljYXRlIGF1dGhlbnRpY2F0aW9uIGZhaWxzLlxyXG4gICAgRVJST1JfSE1TX0RFVklDRV9BVVRIX0ZBSUxFRF9TRUxGX01BUFBJTkcgPSBcIjkwNzEyMjA1MVwiLFxyXG5cclxuICAgIC8vIEZhaWxlZCB0byBiaW5kIHRoZSBzZXJ2aWNlLlxyXG4gICAgRVJST1JfQklORF9TRVJWSUNFX1NFTEZfTUFQUElORyA9IFwiOTA3MTIyMDUyXCIsXHJcblxyXG4gICAgLy8gVGhlIFNESyBpcyBiZWluZyBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkLiBUcnkgYWdhaW4gbGF0ZXIuXHJcbiAgICBFUlJPUl9BVVRPX0lOSVRJQUxJWklORyA9IFwiOTA3MTIyMDU0XCIsXHJcblxyXG4gICAgLypUaGUgaW5wdXQgcGFyYW1ldGVyIGlzIGluY29ycmVjdC4gQ2hlY2sgd2hldGhlciB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QuXHJcbiAgICAgKiBFeGFtcGxlOiBhcHBfaWQgaW4gdGhlIGFnY29ubmVjdCAtIHNlcnZpY2VzLmpzb24gZmlsZTtcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1aWxkLmdyYWRsZSBmaWxlIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2VydGlmaWNhdGUgc2lnbmF0dXJlLlxyXG4gICAgICovXHJcbiAgICBFUlJPUl9BUkdVTUVOVFNfSU5WQUxJRCA9IFwiOTA3MTM1MDAwXCIsXHJcblxyXG4gICAgLy8gSW50ZXJuYWwgUHVzaCBlcnJvci4gQ29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQgZW5naW5lZXJzLlxyXG4gICAgRVJST1JfSU5URVJOQUxfRVJST1IgPSBcIjkwNzEzNTAwMVwiLFxyXG5cclxuICAgIC8vIFRoZSBzZXJ2aWNlIGRvZXMgbm90IGV4aXN0LiBUaGUgaW52b2tlZCBpbnRlcmZhY2UgZG9lcyBub3QgZXhpc3QuXHJcbiAgICBFUlJPUl9OQU1JTkdfSU5WQUxJRCA9IFwiOTA3MTM1MDAyXCIsXHJcblxyXG4gICAgLy8gVGhlIEFwaUNsaWVudCBvYmplY3QgaXMgaW52YWxpZC5cclxuICAgIEVSUk9SX0NMSUVOVF9BUElfSU5WQUxJRCA9IFwiOTA3MTM1MDAzXCIsXHJcblxyXG4gICAgLy8gSW52b2tpbmcgQUlETCB0aW1lcyBvdXQuIENvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxyXG4gICAgRVJST1JfRVhFQ1VURV9USU1FT1VUID0gXCI5MDcxMzUwMDRcIixcclxuXHJcbiAgICAvLyBUaGUgY3VycmVudCBhcmVhIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBzZXJ2aWNlLlxyXG4gICAgRVJST1JfTk9UX0lOX1NFUlZJQ0UgPSBcIjkwNzEzNTAwNVwiLFxyXG5cclxuICAgIC8vIElmIHRoZSBBSURMIGNvbm5lY3Rpb24gc2Vzc2lvbiBpcyBpbnZhbGlkLCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgIEVSUk9SX1NFU1NJT05fSU5WQUxJRCA9IFwiOTA3MTM1MDA2XCIsXHJcblxyXG4gICAgLy8gQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBpbnZva2luZyBhbiB1bnNwZWNpZmllZCBBUEkuXHJcbiAgICBFUlJPUl9BUElfTk9UX1NQRUNJRklFRCA9IFwiMTAwMlwiLFxyXG5cclxuICAgIC8qIEZhaWxlZCB0byBpbnZva2UgdGhlIGdhdGV3YXkgdG8gcXVlcnkgdGhlIGFwcGxpY2F0aW9uIHNjb3BlLlxyXG4gICAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBhcHAgaGFzIGJlZW4gY3JlYXRlZCBhbmQgZW5hYmxlZCBpbiBBcHBHYWxsZXJ5IENvbm5lY3QuXHJcbiAgICAgKiBJZiB5ZXMsIGNvbnRhY3QgSHVhd2VpIHRlY2huaWNhbCBzdXBwb3J0LlxyXG4gICAgICovXHJcbiAgICBFUlJPUl9HRVRfU0NPUEVfRVJST1IgPSBcIjkwNzEzNTcwMFwiLFxyXG4gICAgLyogU2NvcGUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIEFwcEdhbGxlcnkgQ29ubmVjdC5cclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGVuYWJsZWQgaW4gQXBwR2FsbGVyeSBDb25uZWN0LlxyXG4gICAgICogSWYgeWVzLCBjb250YWN0IEh1YXdlaSB0ZWNobmljYWwgc3VwcG9ydC5cclxuICAgICAqL1xyXG4gICAgRVJST1JfU0NPUEVfTElTVF9FTVBUWSA9IFwiOTA3MTM1NzAxXCIsXHJcblxyXG4gICAgLyogVGhlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IGlzIG5vdCBjb25maWd1cmVkIG9uIHRoZSBBcHBHYWxsZXJ5IENvbm5lY3QuXHJcbiAgICAgKiAxLiBDaGVjayB3aGV0aGVyIHlvdXIgcGhvbmUgY2FuIGFjY2VzcyB0aGUgSW50ZXJuZXQuXHJcbiAgICAgKiAyLiBDaGVjayB3aGV0aGVyIHRoZSBjb3JyZWN0IGNlcnRpZmljYXRlIGZpbmdlcnByaW50IGlzIGNvbmZpZ3VyZWQgaW4gQXBwR2FsbGVyeSBDb25uZWN0LiBGb3IgZGV0YWlscywgc2VlIEFwcEdhbGxlcnkgQ29ubmVjdCBjb25maWd1cmF0aW9uIGluIERldmVsb3BtZW50IFByZXBhcmF0aW9ucy5cclxuICAgICAqIDMuIElmIHRoZSBjaGVjayByZXN1bHQgaXMgY29ycmVjdCwgY29udGFjdCBIdWF3ZWkgdGVjaG5pY2FsIHN1cHBvcnQuXHJcbiAgICAgKi9cclxuICAgIEVSUk9SX0NFUlRfRklOR0VSUFJJTlRfRU1QVFkgPSBcIjkwNzEzNTcwMlwiLFxyXG5cclxuICAgIC8vIFBlcm1pc3Npb24gaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIEFwcEdhbGxlcnkgQ29ubmVjdC5cclxuICAgIEVSUk9SX1BFUk1JU1NJT05fTElTVF9FTVBUWSA9IFwiOTA3MTM1NzAzXCIsXHJcblxyXG4gICAgLy8gVGhlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBleGlzdC5cclxuICAgIEVSUk9SX0FVVEhfSU5GT19OT1RfRVhJU1QgPSBcIjYwMDJcIixcclxuXHJcbiAgICAvLyBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQgdmVyaWZpY2F0aW9uLiBDaGVjayB3aGV0aGVyIHRoZSBjb3JyZWN0IGNlcnRpZmljYXRlIGZpbmdlcnByaW50IGlzIGNvbmZpZ3VyZWQgaW4gQXBwR2FsbGVyeSBDb25uZWN0LiBGb3IgZGV0YWlscywgc2VlIEFwcEdhbGxlcnkgQ29ubmVjdCBjb25maWd1cmF0aW9uIGluIERldmVsb3BtZW50IFByZXBhcmF0aW9ucy5cclxuICAgIEVSUk9SX0NFUlRfRklOR0VSUFJJTlRfRVJST1IgPSBcIjYwMDNcIixcclxuXHJcbiAgICAvLyBJbnRlcmZhY2UgYXV0aGVudGljYXRpb246IFRoZSBwZXJtaXNzaW9uIGRvZXMgbm90IGV4aXN0IGFuZCBpcyBub3QgYXBwbGllZCBmb3IgaW4gQXBwR2FsbGVyeSBDb25uZWN0LlxyXG4gICAgRVJST1JfUEVSTUlTU0lPTl9OT1RfRVhJU1QgPSBcIjYwMDRcIixcclxuXHJcbiAgICAvLyBJbnRlcmZhY2UgYXV0aGVudGljYXRpb246IHVuYXV0aG9yaXplZC5cclxuICAgIEVSUk9SX1BFUk1JU1NJT05fTk9UX0FVVEhPUklaRUQgPSBcIjYwMDVcIixcclxuXHJcbiAgICAvLyBJbnRlcmZhY2UgYXV0aGVudGljYXRpb246IFRoZSBhdXRob3JpemF0aW9uIGV4cGlyZXMuXHJcbiAgICBFUlJPUl9QRVJNSVNTSU9OX0VYUElSRUQgPSBcIjYwMDZcIixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQXR0ciB7XHJcbiAgICBpZCA9IFwiaWRcIixcclxuICAgIG1lc3NhZ2UgPSBcIm1lc3NhZ2VcIixcclxuICAgIGZpcmVEYXRlID0gXCJmaXJlRGF0ZVwiLFxyXG4gICAgdGl0bGUgPSBcInRpdGxlXCIsXHJcbiAgICB0aWNrZXIgPSBcInRpY2tlclwiLFxyXG4gICAgc2hvd1doZW4gPSBcInNob3dXaGVuXCIsXHJcbiAgICBhdXRvQ2FuY2VsID0gXCJhdXRvQ2FuY2VsXCIsXHJcbiAgICBsYXJnZUljb24gPSBcImxhcmdlSWNvblwiLFxyXG4gICAgbGFyZ2VJY29uVXJsID0gXCJsYXJnZUljb25VcmxcIixcclxuICAgIHNtYWxsSWNvbiA9IFwic21hbGxJY29uXCIsXHJcbiAgICBiaWdUZXh0ID0gXCJiaWdUZXh0XCIsXHJcbiAgICBzdWJUZXh0ID0gXCJzdWJUZXh0XCIsXHJcbiAgICBiaWdQaWN0dXJlVXJsID0gXCJiaWdQaWN0dXJlVXJsXCIsXHJcbiAgICBzaG9ydGN1dElkID0gXCJzaG9ydGN1dElkXCIsXHJcbiAgICBudW1iZXIgPSBcIm51bWJlclwiLFxyXG4gICAgY2hhbm5lbElkID0gXCJjaGFubmVsSWRcIixcclxuICAgIGNoYW5uZWxOYW1lID0gXCJjaGFubmVsTmFtZVwiLFxyXG4gICAgY2hhbm5lbERlc2NyaXB0aW9uID0gXCJjaGFubmVsRGVzY3JpcHRpb25cIixcclxuICAgIGNvbG9yID0gXCJjb2xvclwiLFxyXG4gICAgZ3JvdXAgPSBcImdyb3VwXCIsXHJcbiAgICBncm91cFN1bW1hcnkgPSBcImdyb3VwU3VtbWFyeVwiLFxyXG4gICAgcGxheVNvdW5kID0gXCJwbGF5U291bmRcIixcclxuICAgIHNvdW5kTmFtZSA9IFwic291bmROYW1lXCIsXHJcbiAgICB2aWJyYXRlID0gXCJ2aWJyYXRlXCIsXHJcbiAgICB2aWJyYXRlRHVyYXRpb24gPSBcInZpYnJhdGVEdXJhdGlvblwiLFxyXG4gICAgYWN0aW9ucyA9IFwiYWN0aW9uc1wiLFxyXG4gICAgaW52b2tlQXBwID0gXCJpbnZva2VBcHBcIixcclxuICAgIHRhZyA9IFwidGFnXCIsXHJcbiAgICByZXBlYXRUeXBlID0gXCJyZXBlYXRUeXBlXCIsXHJcbiAgICByZXBlYXRUaW1lID0gXCJyZXBlYXRUaW1lXCIsXHJcbiAgICBvbmdvaW5nID0gXCJvbmdvaW5nXCIsXHJcbiAgICBhbGxvd1doaWxlSWRsZSA9IFwiYWxsb3dXaGlsZUlkbGVcIixcclxuICAgIGRvbnROb3RpZnlJbkZvcmVncm91bmQgPSBcImRvbnROb3RpZnlJbkZvcmVncm91bmRcIixcclxuICAgIHByaW9yaXR5ID0gXCJwcmlvcml0eVwiLFxyXG4gICAgaW1wb3J0YW5jZSA9IFwiaW1wb3J0YW5jZVwiLFxyXG4gICAgdmlzaWJpbGl0eSA9IFwidmlzaWJpbGl0eVwiLFxyXG4gICAgZGF0YSA9IFwiZGF0YVwiLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBJbXBvcnRhbmNlIHtcclxuICAgIE1BWCA9IFwibWF4XCIsXHJcbiAgICBISUdIID0gXCJoaWdoXCIsXHJcbiAgICBERUZBVUxUID0gXCJkZWZhdWx0XCIsXHJcbiAgICBMT1cgPSBcImxvd1wiLFxyXG4gICAgTUlOID0gXCJtaW5cIixcclxuICAgIE5PTkUgPSBcIm5vbmVcIixcclxuICAgIFVOU1BFQ0lGSUVEID0gXCJ1bnNwZWNpZmllZFwiLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBQcmlvcml0eSB7XHJcbiAgICBNQVggPSBcIm1heFwiLFxyXG4gICAgSElHSCA9IFwiaGlnaFwiLFxyXG4gICAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxyXG4gICAgTE9XID0gXCJsb3dcIixcclxuICAgIE1JTiA9IFwibWluXCIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJlcGVhdFR5cGUge1xyXG4gICAgSE9VUiA9IFwiaG91clwiLFxyXG4gICAgTUlOVVRFID0gXCJtaW51dGVcIixcclxuICAgIERBWSA9IFwiZGF5XCIsXHJcbiAgICBXRUVLID0gXCJ3ZWVrXCIsXHJcbiAgICBDVVNUT01fVElNRSA9IFwiY3VzdG9tX3RpbWVcIixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVmlzaWJpbGl0eSB7XHJcbiAgICBQVUJMSUMgPSBcInB1YmxpY1wiLFxyXG4gICAgU0VDUkVUID0gXCJzZWNyZXRcIixcclxuICAgIFBSSVZBVEUgPSBcInByaXZhdGVcIixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUmVtb3RlTWVzc2FnZUJ1aWxkZXIge1xyXG4gICAgVE8gPSBcInRvXCIsXHJcbiAgICBNRVNTQUdFX0lEID0gXCJtZXNzYWdlSWRcIixcclxuICAgIE1FU1NBR0VfVFlQRSA9IFwibWVzc2FnZVR5cGVcIixcclxuICAgIFRUTCA9IFwidHRsXCIsXHJcbiAgICBDT0xMQVBTRV9LRVkgPSBcImNvbGxhcHNlS2V5XCIsXHJcbiAgICBSRUNFSVBUX01PREUgPSBcInJlY2VpcHRNb2RlXCIsXHJcbiAgICBTRU5EX01PREUgPSBcInNlbmRNb2RlXCIsXHJcbiAgICBEQVRBID0gXCJkYXRhXCIsXHJcbn1cclxuXHJcbmNsYXNzIENvcmRvdmFSZW1vdGVNZXNzYWdlIHtcclxuICAgIHN0YXRpYyBJTlNUQU5DRV9JRF9TQ09QRSA9IFwiSENNXCI7XHJcblxyXG4gICAgc3RhdGljIFBSSU9SSVRZX1VOS05PV04gPSAwO1xyXG4gICAgc3RhdGljIFBSSU9SSVRZX0hJR0ggPSAxO1xyXG4gICAgc3RhdGljIFBSSU9SSVRZX05PUk1BTCA9IDI7XHJcblxyXG4gICAgc3RhdGljIENPTExBUFNFS0VZID0gXCJjb2xsYXBzZUtleVwiO1xyXG4gICAgc3RhdGljIERBVEEgPSBcImRhdGFcIjtcclxuICAgIHN0YXRpYyBEQVRBT0ZNQVAgPSBcImRhdGFPZk1hcFwiO1xyXG4gICAgc3RhdGljIE1FU1NBR0VJRCA9IFwibWVzc2FnZUlkXCI7XHJcbiAgICBzdGF0aWMgTUVTU0FHRVRZUEUgPSBcIm1lc3NhZ2VUeXBlXCI7XHJcbiAgICBzdGF0aWMgT1JJR0lOQUxVUkdFTkNZID0gXCJvcmlnaW5hbFVyZ2VuY3lcIjtcclxuICAgIHN0YXRpYyBVUkdFTkNZID0gXCJ1cmdlbmN5XCI7XHJcbiAgICBzdGF0aWMgVFRMID0gXCJ0dGxcIjtcclxuICAgIHN0YXRpYyBTRU5UVElNRSA9IFwic2VudFRpbWVcIjtcclxuICAgIHN0YXRpYyBUTyA9IFwidG9cIjtcclxuICAgIHN0YXRpYyBGUk9NID0gXCJmcm9tXCI7XHJcbiAgICBzdGF0aWMgVE9LRU4gPSBcInRva2VuXCI7XHJcbiAgICBzdGF0aWMgQU5BTFlUSUNJTkZPID0gXCJhbmFseXRpY0luZm9cIjtcclxuICAgIHN0YXRpYyBBTkFMWVRJQ0lORk9NQVAgPSBcImFuYWx5dGljSW5mb01hcFwiO1xyXG5cclxuICAgIHN0YXRpYyBOT1RJRklDQVRJT04gPSB7XHJcbiAgICAgICAgVElUTEU6IFwidGl0bGVcIixcclxuICAgICAgICBUSVRMRUxPQ0FMSVpBVElPTktFWTogXCJ0aXRsZUxvY2FsaXphdGlvbktleVwiLFxyXG4gICAgICAgIFRJVExFTE9DQUxJWkFUSU9OQVJHUzogXCJ0aXRsZUxvY2FsaXphdGlvbkFyZ3NcIixcclxuICAgICAgICBCT0RZTE9DQUxJWkFUSU9OS0VZOiBcImJvZHlMb2NhbGl6YXRpb25LZXlcIixcclxuICAgICAgICBCT0RZTE9DQUxJWkFUSU9OQVJHUzogXCJib2R5TG9jYWxpemF0aW9uQXJnc1wiLFxyXG4gICAgICAgIEJPRFk6IFwiYm9keVwiLFxyXG4gICAgICAgIElDT046IFwiaWNvblwiLFxyXG4gICAgICAgIFNPVU5EOiBcIlNvdW5kXCIsXHJcbiAgICAgICAgVEFHOiBcIlRhZ1wiLFxyXG4gICAgICAgIENPTE9SOiBcIkNvbG9yXCIsXHJcbiAgICAgICAgQ0xJQ0tBQ1RJT046IFwiQ2xpY2tBY3Rpb25cIixcclxuICAgICAgICBDSEFOTkVMSUQ6IFwiQ2hhbm5lbElkXCIsXHJcbiAgICAgICAgSU1BR0VVUkw6IFwiSW1hZ2VVcmxcIixcclxuICAgICAgICBMSU5LOiBcIkxpbmtcIixcclxuICAgICAgICBOT1RJRllJRDogXCJOb3RpZnlJZFwiLFxyXG4gICAgICAgIFdIRU46IFwiV2hlblwiLFxyXG4gICAgICAgIExJR0hUU0VUVElOR1M6IFwiTGlnaHRTZXR0aW5nc1wiLFxyXG4gICAgICAgIEJBREdFTlVNQkVSOiBcIkJhZGdlTnVtYmVyXCIsXHJcbiAgICAgICAgSU1QT1JUQU5DRTogXCJJbXBvcnRhbmNlXCIsXHJcbiAgICAgICAgVElDS0VSOiBcIlRpY2tlclwiLFxyXG4gICAgICAgIFZJQlJBVEVDT05GSUc6IFwidmlicmF0ZUNvbmZpZ1wiLFxyXG4gICAgICAgIFZJU0lCSUxJVFk6IFwidmlzaWJpbGl0eVwiLFxyXG4gICAgICAgIElOVEVOVFVSSTogXCJpbnRlbnRVcmlcIixcclxuICAgICAgICBJU0FVVE9DQU5DRUw6IFwiaXNBdXRvQ2FuY2VsXCIsXHJcbiAgICAgICAgSVNMT0NBTE9OTFk6IFwiaXNMb2NhbE9ubHlcIixcclxuICAgICAgICBJU0RFRkFVTFRMSUdIVDogXCJpc0RlZmF1bHRMaWdodFwiLFxyXG4gICAgICAgIElTREVGQVVMVFNPVU5EOiBcImlzRGVmYXVsdFNvdW5kXCIsXHJcbiAgICAgICAgSVNERUZBVUxUVklCUkFURTogXCJpc0RlZmF1bHRWaWJyYXRlXCIsXHJcbiAgICB9O1xyXG4gICAgcmVtb3RlTXNnOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdGVNc2cgPSBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBwYXJzZSBhbGwgZWxlbWVudCx1bm9yZGVyZWRcclxuICAgICAqL1xyXG4gICAgcGFyc2VNc2dBbGxBdHRyaWJ1dGUoKSB7XHJcbiAgICAgICAgbGV0IHB1c2hSZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVtb3RlTXNnKSB7XHJcbiAgICAgICAgICAgIHB1c2hSZXN1bHQgPSBwdXNoUmVzdWx0ICsga2V5ICsgXCIgOiBcIiArIHRoaXMucmVtb3RlTXNnW2tleV0gKyBcIlxcblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHVzaFJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0Q29sbGFwc2VLZXkoKSBPYnRhaW5zIHRoZSBjbGFzc2lmaWNhdGlvbiBpZGVudGlmaWVyIChjb2xsYXBzZSBrZXkpIG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0Q29sbGFwc2VLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLkNPTExBUFNFS0VZXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0RGF0YSgpIE9idGFpbnMgdmFsaWQgY29udGVudCBkYXRhIG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuREFUQV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldERhdGFPZk1hcCgpIGEgbWVzc2FnZSBtYXAuXHJcbiAgICAgKi9cclxuICAgIGdldERhdGFPZk1hcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuREFUQU9GTUFQXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0TWVzc2FnZUlkKCkgT2J0YWlucyB0aGUgSUQgb2YgYSBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBnZXRNZXNzYWdlSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk1FU1NBR0VJRF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldE1lc3NhZ2VUeXBlKCkgT2J0YWlucyB0aGUgdHlwZSBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldE1lc3NhZ2VUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5NRVNTQUdFVFlQRV07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldE9yaWdpbmFsVXJnZW5jeSgpIE9idGFpbnMgdGhlIG9yaWdpbmFsIHByaW9yaXR5IG9mIGEgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgZ2V0T3JpZ2luYWxVcmdlbmN5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5PUklHSU5BTFVSR0VOQ1ldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRVcmdlbmN5KCkgT2J0YWlucyBwcmlvcml0eSBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldFVyZ2VuY3koKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLlVSR0VOQ1ldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRUdGwoKSBPYnRhaW5zIHZhbGlkIGdldFR0bCBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldFR0bCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuVFRMXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0U2VudFRpbWUoKSBPYnRhaW5zIHRoZSB0aW1lIHdoZW4gYSBtZXNzYWdlIGlzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBnZXRTZW50VGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuU0VOVFRJTUVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBnZXRUbygpIE9idGFpbnMgdGhlIHJlY2lwaWVudCBvZiBhIG1lc3NhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldFRvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UT107XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIGdldEZyb20oKSBPYnRhaW5zIHRoZSBzZW5kZXIgb2YgYSBtZXNzYWdlLlxyXG4gICAgICovXHJcbiAgICBnZXRGcm9tKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5GUk9NXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogZ2V0VG9rZW4oKSBPYnRhaW5zIHZhbGlkIHRva2VuXHJcbiAgICAgKi9cclxuICAgIGdldFRva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5UT0tFTl07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QW5hbHl0aWNJbmZvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5BTkFMWVRJQ0lORk9dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFuYWx5dGljSW5mb01hcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuQU5BTFlUSUNJTkZPTUFQXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlKCkgT2J0YWlucyB0aGUgdGl0bGUgb2YgYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldE5vdGlmaWNhdGlvblRpdGxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGl0bGVMb2NhbGl6YXRpb25LZXkoKSBPYnRhaW5zIHRoZSBrZXkgb2YgdGhlIGRpc3BsYXllZCB0aXRsZSBvZiBhIG5vdGlmaWNhdGlvbiBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldFRpdGxlTG9jYWxpemF0aW9uS2V5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tcclxuICAgICAgICAgICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlRJVExFTE9DQUxJWkFUSU9OS0VZXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFRpdGxlTG9jYWxpemF0aW9uQXJncygpIE9idGFpbnMgdmFyaWFibGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzcGxheWVkIHRpdGxlIG9mIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRUaXRsZUxvY2FsaXphdGlvbkFyZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xyXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElUTEVMT0NBTElaQVRJT05BUkdTXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEJvZHlMb2NhbGl6YXRpb25LZXkoKSBPYnRhaW5zIHRoZSBrZXkgb2YgdGhlIGRpc3BsYXllZCBjb250ZW50IG9mIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uS2V5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tcclxuICAgICAgICAgICAgQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJPRFlMT0NBTElaQVRJT05LRVlcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0Qm9keUxvY2FsaXphdGlvbkFyZ3MoKSBPYnRhaW5zIHZhcmlhYmxlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3BsYXllZCBjb250ZW50IG9mIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRCb2R5TG9jYWxpemF0aW9uQXJncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbXHJcbiAgICAgICAgICAgIENvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5CT0RZTE9DQUxJWkFUSU9OQVJHU1xyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRCb2R5KCkgT2J0YWlucyB0aGUgYm9keSBvZiBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0Qm9keSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkJPRFldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SWNvbigpIE9idGFpbnMgdGhlIGljb24gb2YgYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldEljb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JQ09OXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFNvdW5kKCkgT2J0YWlucyB0aGUgc291bmQgZnJvbSBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0U291bmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5TT1VORF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRUYWcoKSBPYnRhaW5zIHRoZSB0YWcgZnJvbSBhIG1lc3NhZ2UgZm9yIG1lc3NhZ2Ugb3ZlcndyaXRpbmdcclxuICAgICAqL1xyXG4gICAgZ2V0VGFnKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVEFHXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldENvbG9yKCkgT2J0YWlucyB0aGUgY29sb3JzIG9mIGljb25zIGluIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRDb2xvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLkNPTE9SXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldENsaWNrQWN0aW9uKCkgT2J0YWlucyBhY3Rpb25zIHRyaWdnZXJlZCBieSBtZXNzYWdlIHRhcHBpbmdcclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpY2tBY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5DTElDS0FDVElPTl07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRDaGFubmVsSWQoKSBPYnRhaW5zIElEcyBvZiBjaGFubmVscyB0aGF0IHN1cHBvcnQgdGhlIGRpc3BsYXkgb2YgbWVzc2FnZXNcclxuICAgICAqL1xyXG4gICAgZ2V0Q2hhbm5lbElkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uQ0hBTk5FTElEXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEltYWdlVXJsKCkgT2J0YWlucyB0aGUgaW1hZ2UgVVJMIGZyb20gYSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIGdldEltYWdlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU1BR0VVUkxdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGluaygpIE9idGFpbnMgdGhlIFVSTCB0byBiZSBhY2Nlc3NlZCBmcm9tIGEgbWVzc2FnZVxyXG4gICAgICovXHJcbiAgICBnZXRMaW5rKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uTElOS107XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXROb3RpZnlJZCgpIE9idGFpbnMgdGhlIHVuaXF1ZSBJRCBvZiBhIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZ2V0Tm90aWZ5SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5OT1RJRllJRF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRXaGVuKClcclxuICAgICAqL1xyXG4gICAgZ2V0V2hlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLldIRU5dO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0TGlnaHRTZXR0aW5ncygpXHJcbiAgICAgKi9cclxuICAgIGdldExpZ2h0U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5MSUdIVFNFVFRJTkdTXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldEJhZGdlTnVtYmVyKClcclxuICAgICAqL1xyXG4gICAgZ2V0QmFkZ2VOdW1iZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5CQURHRU5VTUJFUl07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJbXBvcnRhbmNlKClcclxuICAgICAqL1xyXG4gICAgZ2V0SW1wb3J0YW5jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklNUE9SVEFOQ0VdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0VGlja2VyKClcclxuICAgICAqL1xyXG4gICAgZ2V0VGlja2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVElDS0VSXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmdldFZpYnJhdGVDb25maWcoKVxyXG4gICAgICovXHJcbiAgICBnZXRWaWJyYXRlQ29uZmlnKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uVklCUkFURUNPTkZJR107XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRWaXNpYmlsaXR5KClcclxuICAgICAqL1xyXG4gICAgZ2V0VmlzaWJpbGl0eSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLlZJU0lCSUxJVFldO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246Z2V0SW50ZW50VXJpKClcclxuICAgICAqL1xyXG4gICAgZ2V0SW50ZW50VXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSU5URU5UVVJJXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmlzQXV0b0NhbmNlbCgpXHJcbiAgICAgKi9cclxuICAgIGlzQXV0b0NhbmNlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklTQVVUT0NBTkNFTF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjpnZXRJbnRlbnRVcmkoKVxyXG4gICAgICovXHJcbiAgICBpc0xvY2FsT25seSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdGVNc2dbQ29yZG92YVJlbW90ZU1lc3NhZ2UuTk9USUZJQ0FUSU9OLklTTE9DQUxPTkxZXTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogTm90aWZpY2F0aW9uOmlzRGVmYXVsdExpZ2h0KClcclxuICAgICAqL1xyXG4gICAgaXNEZWZhdWx0TGlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW0NvcmRvdmFSZW1vdGVNZXNzYWdlLk5PVElGSUNBVElPTi5JU0RFRkFVTFRMSUdIVF07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIE5vdGlmaWNhdGlvbjppc0RlZmF1bHRTb3VuZCgpXHJcbiAgICAgKi9cclxuICAgIGlzRGVmYXVsdFNvdW5kKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlbW90ZU1zZ1tDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNERUZBVUxUU09VTkRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBOb3RpZmljYXRpb246aXNEZWZhdWx0VmlicmF0ZSgpXHJcbiAgICAgKi9cclxuICAgIGlzRGVmYXVsdFZpYnJhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlTXNnW1xyXG4gICAgICAgICAgICBDb3Jkb3ZhUmVtb3RlTWVzc2FnZS5OT1RJRklDQVRJT04uSVNERUZBVUxUVklCUkFURVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbn1cclxuXHJcbnR5cGUgTG9jYWxOb3RpZmljYXRpb25PYmplY3QgPSB7XHJcbiAgICBba2V5IGluIEF0dHJdPzogYW55O1xyXG59O1xyXG5cclxudHlwZSBSZW1vdGVNZXNzYWdlT2JqZWN0ID0ge1xyXG4gICAgW2tleSBpbiBSZW1vdGVNZXNzYWdlQnVpbGRlcl0/OiBhbnk7XHJcbn07XHJcblxyXG5pbnRlcmZhY2UgSWRUYWcge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIHRhZzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
\ No newline at end of file
diff --git a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.metadata.json b/cordova-plugin-hms-push/ionic-native/dist/ngx/index.metadata.json
deleted file mode 100644
index 3b038ee4..00000000
--- a/cordova-plugin-hms-push/ionic-native/dist/ngx/index.metadata.json
+++ /dev/null
@@ -1,1323 +0,0 @@
-[
- {
- "__symbolic": "module",
- "version": 4,
- "metadata": {
- "HmsPush": {
- "__symbolic": "class",
- "extends": {
- "__symbolic": "reference",
- "module": "@ionic-native/core",
- "name": "IonicNativePlugin",
- "line": 27,
- "character": 29
- },
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Plugin"
- },
- "arguments": [
- {
- "pluginName": "HmsPush",
- "plugin": "@hmscore/cordova-plugin-hms-push",
- "pluginRef": "HmsPush",
- "repo": "https://github.com/HMS-Core/hms-cordova-plugin",
- "platforms": [
- "Android"
- ]
- }
- ]
- },
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "module": "@angular/core",
- "name": "Injectable",
- "line": 26,
- "character": 1
- }
- }
- ],
- "members": {
- "init": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "enableLogger": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "disableLogger": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "turnOnPush": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "turnOffPush": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getAAID": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getToken": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getTokenWithSubjectId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getCreationTime": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteAAID": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteToken": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteTokenWithSubjectId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "subscribe": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "unsubscribe": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "setAutoInitEnabled": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getOdid": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "isAutoInitEnabled": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getInitialNotification": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "sendRemoteMessage": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "setBackgroundFile": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "setItem": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getItem": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "removeItem": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "removeBackgroundFile": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ]
- }
- },
- "HmsLocalNotification": {
- "__symbolic": "class",
- "extends": {
- "__symbolic": "reference",
- "module": "@ionic-native/core",
- "name": "IonicNativePlugin",
- "line": 234,
- "character": 42
- },
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Plugin"
- },
- "arguments": [
- {
- "pluginName": "HmsLocalNotification",
- "plugin": "@hmscore/cordova-plugin-hms-push",
- "pluginRef": "HmsLocalNotification",
- "repo": "https://github.com/HMS-Core/hms-cordova-plugin",
- "platforms": [
- "Android"
- ]
- }
- ]
- },
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "module": "@angular/core",
- "name": "Injectable",
- "line": 233,
- "character": 1
- }
- }
- ],
- "members": {
- "localNotification": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "localNotificationSchedule": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelAllNotifications": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelNotifications": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelScheduledNotifications": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelNotificationsWithId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelNotificationsWithIdTag": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "cancelNotificationsWithTag": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getNotifications": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getScheduledNotifications": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "getChannels": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "channelExists": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "channelBlocked": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteChannel": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ]
- }
- },
- "HmsPushEvent": {
- "__symbolic": "class",
- "extends": {
- "__symbolic": "reference",
- "module": "@ionic-native/core",
- "name": "IonicNativePlugin",
- "line": 320,
- "character": 34
- },
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Plugin"
- },
- "arguments": [
- {
- "pluginName": "HmsPushEvent",
- "plugin": "@hmscore/cordova-plugin-hms-push",
- "pluginRef": "HmsPushEvent",
- "repo": "https://github.com/HMS-Core/hms-cordova-plugin",
- "platforms": [
- "Android"
- ]
- }
- ]
- },
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "module": "@angular/core",
- "name": "Injectable",
- "line": 319,
- "character": 1
- }
- }
- ],
- "members": {
- "onRemoteMessageReceived": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onTokenReceived": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onTokenError": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onPushMessageSent": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onPushMessageSentError": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onPushMessageSentDelivered": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onLocalNotificationAction": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onNotificationOpenedApp": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onMultiSenderTokenReceivedEvent": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "onMultiSenderTokenErrorEvent": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ]
- }
- },
- "HmsPushProfile": {
- "__symbolic": "class",
- "extends": {
- "__symbolic": "reference",
- "module": "@ionic-native/core",
- "name": "IonicNativePlugin",
- "line": 392,
- "character": 36
- },
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Plugin"
- },
- "arguments": [
- {
- "pluginName": "HmsPushProfile",
- "plugin": "@hmscore/cordova-plugin-hms-push",
- "pluginRef": "HmsPushProfile",
- "repo": "https://github.com/HMS-Core/hms-cordova-plugin",
- "platforms": [
- "Android"
- ]
- }
- ]
- },
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "module": "@angular/core",
- "name": "Injectable",
- "line": 391,
- "character": 1
- }
- }
- ],
- "members": {
- "isSupportProfile": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "addProfile": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "addProfileWithSubjectId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteProfile": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ],
- "deleteProfileWithSubjectId": [
- {
- "__symbolic": "method",
- "decorators": [
- {
- "__symbolic": "call",
- "expression": {
- "__symbolic": "reference",
- "name": "Cordova"
- },
- "arguments": [
- {
- "otherPromise": true
- }
- ]
- }
- ]
- }
- ]
- }
- },
- "HmsPushResultCode": {
- "SUCCESS": "0",
- "ERROR": "-1",
- "NULL_BUNDLE": "333",
- "ERROR_NO_TOKEN": "907122030",
- "ERROR_NO_NETWORK": "907122031",
- "ERROR_TOKEN_INVALID": "907122032",
- "ERROR_SERVICE_NOT_AVAILABLE": "907122046",
- "ERROR_PUSH_SERVER": "907122047",
- "ERROR_UNKNOWN": "907122045",
- "ERROR_TOPIC_EXCEED": "907122034",
- "ERROR_TOPIC_SEND": "907122035",
- "ERROR_NO_RIGHT": "907122036",
- "ERROR_GET_TOKEN_ERR": "907122037",
- "ERROR_STORAGE_LOCATION_EMPTY": "907122038",
- "ERROR_NOT_ALLOW_CROSS_APPLY": "907122053",
- "ERROR_SIZE": "907122041",
- "ERROR_INVALID_PARAMETERS": "907122042",
- "ERROR_TOO_MANY_MESSAGES": "907122043",
- "ERROR_TTL_EXCEEDED": "907122044",
- "ERROR_HMS_CLIENT_API": "907122048",
- "ERROR_OPERATION_NOT_SUPPORTED": "907122049",
- "ERROR_MAIN_THREAD": "907122050",
- "ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING": "907122051",
- "ERROR_BIND_SERVICE_SELF_MAPPING": "907122052",
- "ERROR_AUTO_INITIALIZING": "907122054",
- "ERROR_ARGUMENTS_INVALID": "907135000",
- "ERROR_INTERNAL_ERROR": "907135001",
- "ERROR_NAMING_INVALID": "907135002",
- "ERROR_CLIENT_API_INVALID": "907135003",
- "ERROR_EXECUTE_TIMEOUT": "907135004",
- "ERROR_NOT_IN_SERVICE": "907135005",
- "ERROR_SESSION_INVALID": "907135006",
- "ERROR_API_NOT_SPECIFIED": "1002",
- "ERROR_GET_SCOPE_ERROR": "907135700",
- "ERROR_SCOPE_LIST_EMPTY": "907135701",
- "ERROR_CERT_FINGERPRINT_EMPTY": "907135702",
- "ERROR_PERMISSION_LIST_EMPTY": "907135703",
- "ERROR_AUTH_INFO_NOT_EXIST": "6002",
- "ERROR_CERT_FINGERPRINT_ERROR": "6003",
- "ERROR_PERMISSION_NOT_EXIST": "6004",
- "ERROR_PERMISSION_NOT_AUTHORIZED": "6005",
- "ERROR_PERMISSION_EXPIRED": "6006"
- },
- "Attr": {
- "id": "id",
- "message": "message",
- "fireDate": "fireDate",
- "title": "title",
- "ticker": "ticker",
- "showWhen": "showWhen",
- "autoCancel": "autoCancel",
- "largeIcon": "largeIcon",
- "largeIconUrl": "largeIconUrl",
- "smallIcon": "smallIcon",
- "bigText": "bigText",
- "subText": "subText",
- "bigPictureUrl": "bigPictureUrl",
- "shortcutId": "shortcutId",
- "number": "number",
- "channelId": "channelId",
- "channelName": "channelName",
- "channelDescription": "channelDescription",
- "color": "color",
- "group": "group",
- "groupSummary": "groupSummary",
- "playSound": "playSound",
- "soundName": "soundName",
- "vibrate": "vibrate",
- "vibrateDuration": "vibrateDuration",
- "actions": "actions",
- "invokeApp": "invokeApp",
- "tag": "tag",
- "repeatType": "repeatType",
- "repeatTime": "repeatTime",
- "ongoing": "ongoing",
- "allowWhileIdle": "allowWhileIdle",
- "dontNotifyInForeground": "dontNotifyInForeground",
- "priority": "priority",
- "importance": "importance",
- "visibility": "visibility",
- "data": "data"
- },
- "Importance": {
- "MAX": "max",
- "HIGH": "high",
- "DEFAULT": "default",
- "LOW": "low",
- "MIN": "min",
- "NONE": "none",
- "UNSPECIFIED": "unspecified"
- },
- "Priority": {
- "MAX": "max",
- "HIGH": "high",
- "DEFAULT": "default",
- "LOW": "low",
- "MIN": "min"
- },
- "RepeatType": {
- "HOUR": "hour",
- "MINUTE": "minute",
- "DAY": "day",
- "WEEK": "week",
- "CUSTOM_TIME": "custom_time"
- },
- "Visibility": {
- "PUBLIC": "public",
- "SECRET": "secret",
- "PRIVATE": "private"
- },
- "RemoteMessageBuilder": {
- "TO": "to",
- "MESSAGE_ID": "messageId",
- "MESSAGE_TYPE": "messageType",
- "TTL": "ttl",
- "COLLAPSE_KEY": "collapseKey",
- "RECEIPT_MODE": "receiptMode",
- "SEND_MODE": "sendMode",
- "DATA": "data"
- }
- }
- }
-]
diff --git a/cordova-plugin-hms-push/ionic-native/dist/ngx/package.json b/cordova-plugin-hms-push/ionic-native/dist/ngx/package.json
index 2e644da0..1e5825d9 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/ngx/package.json
+++ b/cordova-plugin-hms-push/ionic-native/dist/ngx/package.json
@@ -1,8 +1,8 @@
{
"name": "@hmscore/ionic-native-hms-push",
"description": "Ionic Native wrappers for Cordova Plugin HMS Push",
- "version": "6.12.0-300",
- "zipVersion": "6.12.0.300",
+ "version": "6.12.0-302",
+ "zipVersion": "6.12.0.302",
"module": "index.js",
"typings": "index.d.ts",
"license": "Apache-2.0",
@@ -18,7 +18,7 @@
"@types/cordova": "latest"
},
"peerDependencies": {
- "rxjs": "^5.5.0 || ^6.5.0",
- "@ionic-native/core": "^5.1.0"
+ "@awesome-cordova-plugins/core": "6.4.0",
+ "rxjs": "^7.5.0"
}
}
diff --git a/cordova-plugin-hms-push/ionic-native/dist/package.json b/cordova-plugin-hms-push/ionic-native/dist/package.json
index 2e644da0..52ffcf59 100644
--- a/cordova-plugin-hms-push/ionic-native/dist/package.json
+++ b/cordova-plugin-hms-push/ionic-native/dist/package.json
@@ -1,8 +1,8 @@
{
"name": "@hmscore/ionic-native-hms-push",
"description": "Ionic Native wrappers for Cordova Plugin HMS Push",
- "version": "6.12.0-300",
- "zipVersion": "6.12.0.300",
+ "version": "6.12.0-302",
+ "zipVersion": "6.12.0.302",
"module": "index.js",
"typings": "index.d.ts",
"license": "Apache-2.0",
@@ -18,7 +18,7 @@
"@types/cordova": "latest"
},
"peerDependencies": {
- "rxjs": "^5.5.0 || ^6.5.0",
- "@ionic-native/core": "^5.1.0"
+ "@awesome-cordova-plugins/core": "6.4.0",
+ "rxjs": "^7.5.0"
}
-}
+}
\ No newline at end of file
diff --git a/cordova-plugin-hms-push/ionic-native/index.ts b/cordova-plugin-hms-push/ionic-native/index.ts
index 275c203e..e369afbd 100644
--- a/cordova-plugin-hms-push/ionic-native/index.ts
+++ b/cordova-plugin-hms-push/ionic-native/index.ts
@@ -15,7 +15,7 @@
*/
import { Injectable } from "@angular/core";
-import { Plugin, Cordova, IonicNativePlugin } from "@ionic-native/core";
+import { Plugin, Cordova, AwesomeCordovaNativePlugin } from "@awesome-cordova-plugins/core";
@Plugin({
pluginName: "HmsPush",
@@ -25,7 +25,7 @@ import { Plugin, Cordova, IonicNativePlugin } from "@ionic-native/core";
platforms: ["Android"],
})
@Injectable()
-export class HmsPush extends IonicNativePlugin {
+export class HmsPush extends AwesomeCordovaNativePlugin {
HmsPushResultCode = HmsPushResultCode;
CordovaRemoteMessage = CordovaRemoteMessage;
RemoteMessageBuilder = RemoteMessageBuilder;
@@ -231,7 +231,7 @@ export class HmsPush extends IonicNativePlugin {
platforms: ["Android"],
})
@Injectable()
-export class HmsLocalNotification extends IonicNativePlugin {
+export class HmsLocalNotification extends AwesomeCordovaNativePlugin {
Attr = Attr;
Importance = Importance;
Priority = Priority;
@@ -321,7 +321,7 @@ export class HmsLocalNotification extends IonicNativePlugin {
platforms: ["Android"],
})
@Injectable()
-export class HmsPushEvent extends IonicNativePlugin {
+export class HmsPushEvent extends AwesomeCordovaNativePlugin {
@Cordova({ otherPromise: true })
onRemoteMessageReceived(callback: (data: any) => void): void {
return;
@@ -392,7 +392,7 @@ export class HmsPushEvent extends IonicNativePlugin {
platforms: ["Android"],
})
@Injectable()
-export class HmsPushProfile extends IonicNativePlugin {
+export class HmsPushProfile extends AwesomeCordovaNativePlugin {
HUAWEI_PROFILE = 1;
CUSTOM_PROFILE = 2;
UNDEFINED_PROFILE = -1;
diff --git a/cordova-plugin-hms-push/package.json b/cordova-plugin-hms-push/package.json
index ce6cc861..06d7424f 100644
--- a/cordova-plugin-hms-push/package.json
+++ b/cordova-plugin-hms-push/package.json
@@ -1,7 +1,7 @@
{
"name": "@hmscore/cordova-plugin-hms-push",
"description": "Cordova HMS Push Plugin",
- "version": "6.12.0-300",
+ "version": "6.12.0-302",
"main": "./www/HmsPush.js",
"types": "./types/index.d.ts",
"repository": {
diff --git a/cordova-plugin-hms-push/plugin.xml b/cordova-plugin-hms-push/plugin.xml
index 4e2436cb..e1e07321 100644
--- a/cordova-plugin-hms-push/plugin.xml
+++ b/cordova-plugin-hms-push/plugin.xml
@@ -1,6 +1,6 @@
Cordova Plugin HMS Push
@@ -74,7 +74,7 @@
-
+
diff --git a/cordova-plugin-hms-push/src/android/build.gradle b/cordova-plugin-hms-push/src/android/build.gradle
index c71eccc5..4315c986 100644
--- a/cordova-plugin-hms-push/src/android/build.gradle
+++ b/cordova-plugin-hms-push/src/android/build.gradle
@@ -33,7 +33,7 @@ android {
}
dependencies {
- implementation 'com.facebook.fresco:fresco:2.6.0'
+ implementation 'com.facebook.fresco:fresco:3.1.3'
implementation 'org.apache.cordova:framework:8.1.0'
implementation 'com.huawei.hms:push:6.12.0.300'
implementation 'androidx.core:core:1.3.0'
diff --git a/cordova-plugin-hms-push/src/android/src/main/java/com/huawei/hms/cordova/push/HMSPush.java b/cordova-plugin-hms-push/src/android/src/main/java/com/huawei/hms/cordova/push/HMSPush.java
index f4ab2e0b..960d5794 100644
--- a/cordova-plugin-hms-push/src/android/src/main/java/com/huawei/hms/cordova/push/HMSPush.java
+++ b/cordova-plugin-hms-push/src/android/src/main/java/com/huawei/hms/cordova/push/HMSPush.java
@@ -48,7 +48,7 @@
public class HMSPush extends CordovaPlugin {
private static final String KIT = "Push";
- private static final String VERSION = "6.12.0.300";
+ private static final String VERSION = "6.12.0.302";
private static CordovaInterface staticCordova;
diff --git a/cordova-plugin-hms-push/www/CordovaRemoteMessage.js b/cordova-plugin-hms-push/www/CordovaRemoteMessage.js
index 7732135b..ac2c0322 100644
--- a/cordova-plugin-hms-push/www/CordovaRemoteMessage.js
+++ b/cordova-plugin-hms-push/www/CordovaRemoteMessage.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CordovaRemoteMessage = void 0;
diff --git a/cordova-plugin-hms-push/www/HmsLocalNotification.js b/cordova-plugin-hms-push/www/HmsLocalNotification.js
index b0ab6e26..6ef69ad8 100644
--- a/cordova-plugin-hms-push/www/HmsLocalNotification.js
+++ b/cordova-plugin-hms-push/www/HmsLocalNotification.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Visibility = exports.RepeatType = exports.Priority = exports.Importance = exports.Attr = exports.deleteChannel = exports.channelBlocked = exports.channelExists = exports.getChannels = exports.getScheduledNotifications = exports.getNotifications = exports.cancelNotificationsWithTag = exports.cancelNotificationsWithIdTag = exports.cancelNotificationsWithId = exports.cancelScheduledNotifications = exports.cancelNotifications = exports.cancelAllNotifications = exports.localNotificationSchedule = exports.localNotification = void 0;
diff --git a/cordova-plugin-hms-push/www/HmsPush.js b/cordova-plugin-hms-push/www/HmsPush.js
index 8c1586e3..1798e4ba 100644
--- a/cordova-plugin-hms-push/www/HmsPush.js
+++ b/cordova-plugin-hms-push/www/HmsPush.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CordovaRemoteMessage = exports.RemoteMessageBuilder = exports.removeBackgroundFile = exports.getItem = exports.removeItem = exports.setItem = exports.setBackgroundFile = exports.getInitialNotification = exports.sendRemoteMessage = exports.unsubscribe = exports.subscribe = exports.turnOffPush = exports.turnOnPush = exports.setAutoInitEnabled = exports.isAutoInitEnabled = exports.getOdid = exports.deleteTokenWithSubjectId = exports.deleteToken = exports.deleteAAID = exports.getId = exports.getCreationTime = exports.getAAID = exports.getTokenWithSubjectId = exports.getToken = exports.disableLogger = exports.enableLogger = exports.init = exports.DEFAULT_TOKEN_SCOPE = void 0;
diff --git a/cordova-plugin-hms-push/www/HmsPushEvent.js b/cordova-plugin-hms-push/www/HmsPushEvent.js
index 8f794a3d..ba2661a5 100644
--- a/cordova-plugin-hms-push/www/HmsPushEvent.js
+++ b/cordova-plugin-hms-push/www/HmsPushEvent.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT = exports.ON_MULTI_SENDER_TOKEN_ERROR_EVENT = exports.ON_PUSH_MESSAGE_SENT_DELIVERED = exports.ON_PUSH_MESSAGE_SENT_ERROR = exports.ON_PUSH_MESSAGE_SENT = exports.LOCAL_NOTIFICATION_ACTION_EVENT = exports.NOTIFICATION_OPENED_EVENT = exports.ON_TOKEN_ERROR_EVENT = exports.TOKEN_RECEIVED_EVENT = exports.REMOTE_DATA_MESSAGE_RECEIVED = exports.onMultiSenderTokenErrorEvent = exports.onMultiSenderTokenReceivedEvent = exports.onNotificationOpenedApp = exports.onLocalNotificationAction = exports.onPushMessageSentDelivered = exports.onPushMessageSentError = exports.onPushMessageSent = exports.onTokenError = exports.onTokenReceived = exports.onRemoteMessageReceived = void 0;
diff --git a/cordova-plugin-hms-push/www/HmsPushProfile.js b/cordova-plugin-hms-push/www/HmsPushProfile.js
index 51d2b148..ffd7bc54 100644
--- a/cordova-plugin-hms-push/www/HmsPushProfile.js
+++ b/cordova-plugin-hms-push/www/HmsPushProfile.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteProfileWithSubjectId = exports.deleteProfile = exports.addProfileWithSubjectId = exports.addProfile = exports.isSupportProfile = exports.UNDEFINED_PROFILE = exports.CUSTOM_PROFILE = exports.HUAWEI_PROFILE = void 0;
diff --git a/cordova-plugin-hms-push/www/HmsPushResultCode.js b/cordova-plugin-hms-push/www/HmsPushResultCode.js
index b143b6b2..4556bec8 100644
--- a/cordova-plugin-hms-push/www/HmsPushResultCode.js
+++ b/cordova-plugin-hms-push/www/HmsPushResultCode.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ERROR_PERMISSION_EXPIRED = exports.ERROR_PERMISSION_NOT_AUTHORIZED = exports.ERROR_PERMISSION_NOT_EXIST = exports.ERROR_CERT_FINGERPRINT_ERROR = exports.ERROR_AUTH_INFO_NOT_EXIST = exports.ERROR_PERMISSION_LIST_EMPTY = exports.ERROR_CERT_FINGERPRINT_EMPTY = exports.ERROR_SCOPE_LIST_EMPTY = exports.ERROR_GET_SCOPE_ERROR = exports.ERROR_API_NOT_SPECIFIED = exports.ERROR_SESSION_INVALID = exports.ERROR_NOT_IN_SERVICE = exports.ERROR_EXECUTE_TIMEOUT = exports.ERROR_CLIENT_API_INVALID = exports.ERROR_NAMING_INVALID = exports.ERROR_INTERNAL_ERROR = exports.ERROR_ARGUMENTS_INVALID = exports.ERROR_AUTO_INITIALIZING = exports.ERROR_BIND_SERVICE_SELF_MAPPING = exports.ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING = exports.ERROR_MAIN_THREAD = exports.ERROR_OPERATION_NOT_SUPPORTED = exports.ERROR_HMS_CLIENT_API = exports.ERROR_TTL_EXCEEDED = exports.ERROR_TOO_MANY_MESSAGES = exports.ERROR_INVALID_PARAMETERS = exports.ERROR_SIZE = exports.ERROR_NOT_ALLOW_CROSS_APPLY = exports.ERROR_STORAGE_LOCATION_EMPTY = exports.ERROR_GET_TOKEN_ERR = exports.ERROR_NO_RIGHT = exports.ERROR_TOPIC_SEND = exports.ERROR_TOPIC_EXCEED = exports.ERROR_UNKNOWN = exports.ERROR_PUSH_SERVER = exports.ERROR_SERVICE_NOT_AVAILABLE = exports.ERROR_TOKEN_INVALID = exports.ERROR_NO_NETWORK = exports.ERROR_NO_TOKEN = exports.NULL_BUNDLE = exports.ERROR = exports.SUCCESS = void 0;
diff --git a/cordova-plugin-hms-push/www/Interfaces.js b/cordova-plugin-hms-push/www/Interfaces.js
index ddc36469..4fa9d15d 100644
--- a/cordova-plugin-hms-push/www/Interfaces.js
+++ b/cordova-plugin-hms-push/www/Interfaces.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Visibility = exports.RepeatType = exports.Priority = exports.Importance = exports.RemoteMessageBuilder = exports.Attr = void 0;
diff --git a/cordova-plugin-hms-push/www/index.js b/cordova-plugin-hms-push/www/index.js
index cb7f2ff3..4af13d5a 100644
--- a/cordova-plugin-hms-push/www/index.js
+++ b/cordova-plugin-hms-push/www/index.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
diff --git a/cordova-plugin-hms-push/www/utils.js b/cordova-plugin-hms-push/www/utils.js
index a1f6e640..214c84d3 100644
--- a/cordova-plugin-hms-push/www/utils.js
+++ b/cordova-plugin-hms-push/www/utils.js
@@ -13,6 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
+
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.asyncExec = void 0;