UNPKG

@aws-cdk/aws-ec2

Version:

The CDK Construct Library for AWS::EC2

683 lines 69.6 kB
"use strict"; // Copyright 2012-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. Object.defineProperty(exports, "__esModule", { value: true }); exports.VPNMetrics = exports.TransitGatewayMetrics = exports.NATGatewayMetrics = exports.CWAgentMetrics = exports.EC2Metrics = exports.EBSMetrics = exports.EC2CapacityReservationsMetrics = void 0; /* eslint-disable max-len */ // This is generated code - line lengths are difficult to control class EC2CapacityReservationsMetrics { static instanceUtilizationAverage(dimensions) { return { namespace: 'AWS/EC2CapacityReservations', metricName: 'InstanceUtilization', dimensionsMap: dimensions, statistic: 'Average', }; } static usedInstanceCountAverage(dimensions) { return { namespace: 'AWS/EC2CapacityReservations', metricName: 'UsedInstanceCount', dimensionsMap: dimensions, statistic: 'Average', }; } static availableInstanceCountAverage(dimensions) { return { namespace: 'AWS/EC2CapacityReservations', metricName: 'AvailableInstanceCount', dimensionsMap: dimensions, statistic: 'Average', }; } static totalInstanceCountAverage(dimensions) { return { namespace: 'AWS/EC2CapacityReservations', metricName: 'TotalInstanceCount', dimensionsMap: dimensions, statistic: 'Average', }; } } exports.EC2CapacityReservationsMetrics = EC2CapacityReservationsMetrics; class EBSMetrics { static volumeReadBytesSum(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeReadBytes', dimensionsMap: dimensions, statistic: 'Sum', }; } static volumeWriteBytesSum(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeWriteBytes', dimensionsMap: dimensions, statistic: 'Sum', }; } static volumeReadOpsSum(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeReadOps', dimensionsMap: dimensions, statistic: 'Sum', }; } static volumeTotalReadTimeAverage(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeTotalReadTime', dimensionsMap: dimensions, statistic: 'Average', }; } static volumeWriteOpsSum(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeWriteOps', dimensionsMap: dimensions, statistic: 'Sum', }; } static volumeTotalWriteTimeAverage(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeTotalWriteTime', dimensionsMap: dimensions, statistic: 'Average', }; } static volumeIdleTimeAverage(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeIdleTime', dimensionsMap: dimensions, statistic: 'Average', }; } static volumeQueueLengthAverage(dimensions) { return { namespace: 'AWS/EBS', metricName: 'VolumeQueueLength', dimensionsMap: dimensions, statistic: 'Average', }; } static burstBalanceAverage(dimensions) { return { namespace: 'AWS/EBS', metricName: 'BurstBalance', dimensionsMap: dimensions, statistic: 'Average', }; } } exports.EBSMetrics = EBSMetrics; class EC2Metrics { static cpuCreditUsageAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'CPUCreditUsage', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuCreditBalanceAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'CPUCreditBalance', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuSurplusCreditBalanceAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'CPUSurplusCreditBalance', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuSurplusCreditsChargedAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'CPUSurplusCreditsCharged', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuUtilizationAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'CPUUtilization', dimensionsMap: dimensions, statistic: 'Average', }; } static diskReadBytesAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'DiskReadBytes', dimensionsMap: dimensions, statistic: 'Average', }; } static diskReadOpsAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'DiskReadOps', dimensionsMap: dimensions, statistic: 'Average', }; } static diskWriteBytesAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'DiskWriteBytes', dimensionsMap: dimensions, statistic: 'Average', }; } static diskWriteOpsAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'DiskWriteOps', dimensionsMap: dimensions, statistic: 'Average', }; } static metadataNoTokenSum(dimensions) { return { namespace: 'AWS/EC2', metricName: 'MetadataNoToken', dimensionsMap: dimensions, statistic: 'Sum', }; } static networkInAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'NetworkIn', dimensionsMap: dimensions, statistic: 'Average', }; } static networkOutAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'NetworkOut', dimensionsMap: dimensions, statistic: 'Average', }; } static networkPacketsInAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'NetworkPacketsIn', dimensionsMap: dimensions, statistic: 'Average', }; } static networkPacketsOutAverage(dimensions) { return { namespace: 'AWS/EC2', metricName: 'NetworkPacketsOut', dimensionsMap: dimensions, statistic: 'Average', }; } static statusCheckFailedSum(dimensions) { return { namespace: 'AWS/EC2', metricName: 'StatusCheckFailed', dimensionsMap: dimensions, statistic: 'Sum', }; } static statusCheckFailedInstanceSum(dimensions) { return { namespace: 'AWS/EC2', metricName: 'StatusCheckFailed_Instance', dimensionsMap: dimensions, statistic: 'Sum', }; } static statusCheckFailedSystemSum(dimensions) { return { namespace: 'AWS/EC2', metricName: 'StatusCheckFailed_System', dimensionsMap: dimensions, statistic: 'Sum', }; } } exports.EC2Metrics = EC2Metrics; class CWAgentMetrics { static cpuUsageIdleAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'cpu_usage_idle', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuUsageIowaitAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'cpu_usage_iowait', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuUsageStealAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'cpu_usage_steal', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuUsageSystemAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'cpu_usage_system', dimensionsMap: dimensions, statistic: 'Average', }; } static cpuUsageUserAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'cpu_usage_user', dimensionsMap: dimensions, statistic: 'Average', }; } static diskInodesFreeSum(dimensions) { return { namespace: 'CWAgent', metricName: 'disk_inodes_free', dimensionsMap: dimensions, statistic: 'Sum', }; } static diskInodesTotalSum(dimensions) { return { namespace: 'CWAgent', metricName: 'disk_inodes_total', dimensionsMap: dimensions, statistic: 'Sum', }; } static diskInodesUsedSum(dimensions) { return { namespace: 'CWAgent', metricName: 'disk_inodes_used', dimensionsMap: dimensions, statistic: 'Sum', }; } static diskUsedPercentAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'disk_used_percent', dimensionsMap: dimensions, statistic: 'Average', }; } static diskioIoTimeAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'diskio_io_time', dimensionsMap: dimensions, statistic: 'Average', }; } static diskioReadBytesAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'diskio_read_bytes', dimensionsMap: dimensions, statistic: 'Average', }; } static diskioReadsAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'diskio_reads', dimensionsMap: dimensions, statistic: 'Average', }; } static diskioWriteBytesAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'diskio_write_bytes', dimensionsMap: dimensions, statistic: 'Average', }; } static diskioWritesAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'diskio_writes', dimensionsMap: dimensions, statistic: 'Average', }; } static memCachedAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'mem_cached', dimensionsMap: dimensions, statistic: 'Average', }; } static memTotalAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'mem_total', dimensionsMap: dimensions, statistic: 'Average', }; } static memUsedAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'mem_used', dimensionsMap: dimensions, statistic: 'Average', }; } static memUsedPercentAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'mem_used_percent', dimensionsMap: dimensions, statistic: 'Average', }; } static netstatTcpEstablishedSum(dimensions) { return { namespace: 'CWAgent', metricName: 'netstat_tcp_established', dimensionsMap: dimensions, statistic: 'Sum', }; } static netstatTcpTimeWaitSum(dimensions) { return { namespace: 'CWAgent', metricName: 'netstat_tcp_time_wait', dimensionsMap: dimensions, statistic: 'Sum', }; } static swapUsedPercentAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'swap_used_percent', dimensionsMap: dimensions, statistic: 'Average', }; } static tcPv4ConnectionsEstablishedSum(dimensions) { return { namespace: 'CWAgent', metricName: 'TCPv4 Connections Established', dimensionsMap: dimensions, statistic: 'Sum', }; } static tcPv6ConnectionsEstablishedSum(dimensions) { return { namespace: 'CWAgent', metricName: 'TCPv6 Connections Established', dimensionsMap: dimensions, statistic: 'Sum', }; } static memoryCommittedBytesInUseAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'Memory % Committed Bytes In Use', dimensionsMap: dimensions, statistic: 'Average', }; } static processorIdleTimeAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'Processor % Idle Time', dimensionsMap: dimensions, statistic: 'Average', }; } static processorInterruptTimeAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'Processor % Interrupt Time', dimensionsMap: dimensions, statistic: 'Average', }; } static processorUserTimeAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'Processor % User Time', dimensionsMap: dimensions, statistic: 'Average', }; } static logicalDiskFreeSpaceAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'LogicalDisk % Free Space', dimensionsMap: dimensions, statistic: 'Average', }; } static pagingFileUsageAverage(dimensions) { return { namespace: 'CWAgent', metricName: 'Paging File % Usage', dimensionsMap: dimensions, statistic: 'Average', }; } } exports.CWAgentMetrics = CWAgentMetrics; class NATGatewayMetrics { static activeConnectionCountMaximum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'ActiveConnectionCount', dimensionsMap: dimensions, statistic: 'Maximum', }; } static packetsDropCountSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'PacketsDropCount', dimensionsMap: dimensions, statistic: 'Sum', }; } static bytesInFromDestinationSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'BytesInFromDestination', dimensionsMap: dimensions, statistic: 'Sum', }; } static bytesInFromSourceSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'BytesInFromSource', dimensionsMap: dimensions, statistic: 'Sum', }; } static bytesOutToDestinationSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'BytesOutToDestination', dimensionsMap: dimensions, statistic: 'Sum', }; } static bytesOutToSourceSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'BytesOutToSource', dimensionsMap: dimensions, statistic: 'Sum', }; } static connectionAttemptCountSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'ConnectionAttemptCount', dimensionsMap: dimensions, statistic: 'Sum', }; } static connectionEstablishedCountSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'ConnectionEstablishedCount', dimensionsMap: dimensions, statistic: 'Sum', }; } static errorPortAllocationSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'ErrorPortAllocation', dimensionsMap: dimensions, statistic: 'Sum', }; } static idleTimeoutCountSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'IdleTimeoutCount', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsInFromDestinationSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'PacketsInFromDestination', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsInFromSourceSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'PacketsInFromSource', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsOutToDestinationSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'PacketsOutToDestination', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsOutToSourceSum(dimensions) { return { namespace: 'AWS/NATGateway', metricName: 'PacketsOutToSource', dimensionsMap: dimensions, statistic: 'Sum', }; } } exports.NATGatewayMetrics = NATGatewayMetrics; class TransitGatewayMetrics { static bytesInSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'BytesIn', dimensionsMap: dimensions, statistic: 'Sum', }; } static bytesOutSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'BytesOut', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetDropCountBlackholeSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'PacketDropCountBlackhole', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetDropCountNoRouteSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'PacketDropCountNoRoute', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsInSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'PacketsIn', dimensionsMap: dimensions, statistic: 'Sum', }; } static packetsOutSum(dimensions) { return { namespace: 'AWS/TransitGateway', metricName: 'PacketsOut', dimensionsMap: dimensions, statistic: 'Sum', }; } } exports.TransitGatewayMetrics = TransitGatewayMetrics; class VPNMetrics { static tunnelDataInSum(dimensions) { return { namespace: 'AWS/VPN', metricName: 'TunnelDataIn', dimensionsMap: dimensions, statistic: 'Sum', }; } static tunnelStateAverage(dimensions) { return { namespace: 'AWS/VPN', metricName: 'TunnelState', dimensionsMap: dimensions, statistic: 'Average', }; } static tunnelDataOutSum(dimensions) { return { namespace: 'AWS/VPN', metricName: 'TunnelDataOut', dimensionsMap: dimensions, statistic: 'Sum', }; } } exports.VPNMetrics = VPNMetrics; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVjMi1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtFQUErRTs7O0FBRS9FLDRCQUE0QixDQUFDLGlFQUFpRTtBQUU5RixNQUFhLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsVUFBNkM7UUFDcEYsT0FBTztZQUNMLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBNkM7UUFDbEYsT0FBTztZQUNMLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsVUFBNkM7UUFDdkYsT0FBTztZQUNMLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMseUJBQXlCLENBQUMsVUFBNkM7UUFDbkYsT0FBTztZQUNMLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7Q0FDRjtBQWpDRCx3RUFpQ0M7QUFDRCxNQUFhLFVBQVU7SUFDZCxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBZ0M7UUFDL0QsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWdDO1FBQ2hFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFnQztRQUM3RCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGVBQWU7WUFDM0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDBCQUEwQixDQUFDLFVBQWdDO1FBQ3ZFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUscUJBQXFCO1lBQ2pDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFnQztRQUM5RCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsMkJBQTJCLENBQUMsVUFBZ0M7UUFDeEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxzQkFBc0I7WUFDbEMsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQWdDO1FBQ2xFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFnQztRQUNyRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBZ0M7UUFDaEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxjQUFjO1lBQzFCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtDQUNGO0FBekVELGdDQXlFQztBQUNELE1BQWEsVUFBVTtJQUNkLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFrQztRQUNwRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsVUFBa0M7UUFDdEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDhCQUE4QixDQUFDLFVBQWtDO1FBQzdFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUseUJBQXlCO1lBQ3JDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxVQUFrQztRQUM5RSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLDBCQUEwQjtZQUN0QyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFNTSxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBZTtRQUNqRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFNTSxNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBZTtRQUNoRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGVBQWU7WUFDM0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBTU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQWU7UUFDOUMsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQU1NLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFlO1FBQ2pELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQU1NLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFlO1FBQy9DLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsY0FBYztZQUMxQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFHTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBZTtRQUM5QyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFNTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBZTtRQUM1QyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLFdBQVc7WUFDdkIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBTU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQWU7UUFDN0MsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUlNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxVQUFlO1FBQ25ELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUlNLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFlO1FBQ3BELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUFrQztRQUNuRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsNEJBQTRCLENBQUMsVUFBa0M7UUFDM0UsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSw0QkFBNEI7WUFDeEMsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDBCQUEwQixDQUFDLFVBQWtDO1FBQ3pFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsMEJBQTBCO1lBQ3RDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtDQUNGO0FBcExELGdDQW9MQztBQUNELE1BQWEsY0FBYztJQUNsQixNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBa0M7UUFDbEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQWtDO1FBQ3BFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUFrQztRQUNuRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBa0M7UUFDcEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWtDO1FBQ2xFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFrQztRQUNoRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBa0M7UUFDakUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQWtDO1FBQ2hFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsa0JBQWtCO1lBQzlCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFrQztRQUNyRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBa0M7UUFDbEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQWtDO1FBQ3JFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFrQztRQUNqRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGNBQWM7WUFDMUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHVCQUF1QixDQUFDLFVBQWtDO1FBQ3RFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFrQztRQUNsRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGVBQWU7WUFDM0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQWtDO1FBQy9ELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsWUFBWTtZQUN4QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQWtDO1FBQzlELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsV0FBVztZQUN2QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQWtDO1FBQzdELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsVUFBVTtZQUN0QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBa0M7UUFDcEUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHdCQUF3QixDQUFDLFVBQWtDO1FBQ3ZFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUseUJBQXlCO1lBQ3JDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFrQztRQUNwRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBa0M7UUFDckUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDhCQUE4QixDQUFDLFVBQWtDO1FBQzdFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsK0JBQStCO1lBQzNDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxVQUFrQztRQUM3RSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLCtCQUErQjtZQUMzQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsVUFBa0M7UUFDL0UsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxpQ0FBaUM7WUFDN0MsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHdCQUF3QixDQUFDLFVBQWtDO1FBQ3ZFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFrQztRQUM1RSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLDRCQUE0QjtZQUN4QyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBa0M7UUFDdkUsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSx1QkFBdUI7WUFDbkMsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDJCQUEyQixDQUFDLFVBQWtDO1FBQzFFLE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsMEJBQTBCO1lBQ3RDLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFrQztRQUNyRSxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7Q0FDRjtBQXpPRCx3Q0F5T0M7QUFDRCxNQUFhLGlCQUFpQjtJQUNyQixNQUFNLENBQUMsNEJBQTRCLENBQUMsVUFBb0M7UUFDN0UsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBb0M7UUFDcEUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMseUJBQXlCLENBQUMsVUFBb0M7UUFDMUUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBb0M7UUFDckUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBb0M7UUFDekUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHVCQUF1QjtZQUNuQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBb0M7UUFDcEUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMseUJBQXlCLENBQUMsVUFBb0M7UUFDMUUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsVUFBb0M7UUFDOUUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLDRCQUE0QjtZQUN4QyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBb0M7UUFDdkUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBb0M7UUFDcEUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsMkJBQTJCLENBQUMsVUFBb0M7UUFDNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLDBCQUEwQjtZQUN0QyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsVUFBb0M7UUFDdkUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsMEJBQTBCLENBQUMsVUFBb0M7UUFDM0UsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLHlCQUF5QjtZQUNyQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBb0M7UUFDdEUsT0FBTztZQUNMLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7Q0FDRjtBQWpIRCw4Q0FpSEM7QUFDRCxNQUFhLHFCQUFxQjtJQUN6QixNQUFNLENBQUMsVUFBVSxDQUFDLFVBQXNDO1FBQzdELE9BQU87WUFDTCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBc0M7UUFDOUQsT0FBTztZQUNMLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsVUFBVSxFQUFFLFVBQVU7WUFDdEIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLDJCQUEyQixDQUFDLFVBQXNDO1FBQzlFLE9BQU87WUFDTCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFVBQVUsRUFBRSwwQkFBMEI7WUFDdEMsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLHlCQUF5QixDQUFDLFVBQXNDO1FBQzVFLE9BQU87WUFDTCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFVBQVUsRUFBRSx3QkFBd0I7WUFDcEMsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFzQztRQUMvRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixVQUFVLEVBQUUsV0FBVztZQUN2QixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7SUFDTSxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQXNDO1FBQ2hFLE9BQU87WUFDTCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtDQUNGO0FBakRELHNEQWlEQztBQUNELE1BQWEsVUFBVTtJQUNkLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBNkI7UUFDekQsT0FBTztZQUNMLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxjQUFjO1lBQzFCLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7S0FDSDtJQUNNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUE2QjtRQUM1RCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLGFBQWE7WUFDekIsYUFBYSxFQUFFLFVBQVU7WUFDekIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQztLQUNIO0lBQ00sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQTZCO1FBQzFELE9BQU87WUFDTCxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsZUFBZTtZQUMzQixhQUFhLEVBQUUsVUFBVTtZQUN6QixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDO0tBQ0g7Q0FDRjtBQXpCRCxnQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxMi0yMDIzIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8gLy8gVGhpcyBpcyBnZW5lcmF0ZWQgY29kZSAtIGxpbmUgbGVuZ3RocyBhcmUgZGlmZmljdWx0IHRvIGNvbnRyb2xcblxuZXhwb3J0IGNsYXNzIEVDMkNhcGFjaXR5UmVzZXJ2YXRpb25zTWV0cmljcyB7XG4gIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VVdGlsaXphdGlvbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBDYXBhY2l0eVJlc2VydmF0aW9uSWQ6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9FQzJDYXBhY2l0eVJlc2VydmF0aW9ucycsXG4gICAgICBtZXRyaWNOYW1lOiAnSW5zdGFuY2VVdGlsaXphdGlvbicsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHVzZWRJbnN0YW5jZUNvdW50QXZlcmFnZShkaW1lbnNpb25zOiB7IENhcGFjaXR5UmVzZXJ2YXRpb25JZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VDMkNhcGFjaXR5UmVzZXJ2YXRpb25zJyxcbiAgICAgIG1ldHJpY05hbWU6ICdVc2VkSW5zdGFuY2VDb3VudCcsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGF2YWlsYWJsZUluc3RhbmNlQ291bnRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQ2FwYWNpdHlSZXNlcnZhdGlvbklkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbnMnLFxuICAgICAgbWV0cmljTmFtZTogJ0F2YWlsYWJsZUluc3RhbmNlQ291bnQnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyB0b3RhbEluc3RhbmNlQ291bnRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQ2FwYWNpdHlSZXNlcnZhdGlvbklkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbnMnLFxuICAgICAgbWV0cmljTmFtZTogJ1RvdGFsSW5zdGFuY2VDb3VudCcsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVCU01ldHJpY3Mge1xuICBwdWJsaWMgc3RhdGljIHZvbHVtZVJlYWRCeXRlc1N1bShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVSZWFkQnl0ZXMnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVdyaXRlQnl0ZXNTdW0oZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VCUycsXG4gICAgICBtZXRyaWNOYW1lOiAnVm9sdW1lV3JpdGVCeXRlcycsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgdm9sdW1lUmVhZE9wc1N1bShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVSZWFkT3BzJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyB2b2x1bWVUb3RhbFJlYWRUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVUb3RhbFJlYWRUaW1lJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgdm9sdW1lV3JpdGVPcHNTdW0oZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VCUycsXG4gICAgICBtZXRyaWNOYW1lOiAnVm9sdW1lV3JpdGVPcHMnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVRvdGFsV3JpdGVUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVUb3RhbFdyaXRlVGltZScsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHZvbHVtZUlkbGVUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVJZGxlVGltZScsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVF1ZXVlTGVuZ3RoQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUJTJyxcbiAgICAgIG1ldHJpY05hbWU6ICdWb2x1bWVRdWV1ZUxlbmd0aCcsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGJ1cnN0QmFsYW5jZUF2ZXJhZ2UoZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VCUycsXG4gICAgICBtZXRyaWNOYW1lOiAnQnVyc3RCYWxhbmNlJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgY2xhc3MgRUMyTWV0cmljcyB7XG4gIHB1YmxpYyBzdGF0aWMgY3B1Q3JlZGl0VXNhZ2VBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VDMicsXG4gICAgICBtZXRyaWNOYW1lOiAnQ1BVQ3JlZGl0VXNhZ2UnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcHVDcmVkaXRCYWxhbmNlQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9FQzInLFxuICAgICAgbWV0cmljTmFtZTogJ0NQVUNyZWRpdEJhbGFuY2UnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcHVTdXJwbHVzQ3JlZGl0QmFsYW5jZUF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyJyxcbiAgICAgIG1ldHJpY05hbWU6ICdDUFVTdXJwbHVzQ3JlZGl0QmFsYW5jZScsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNwdVN1cnBsdXNDcmVkaXRzQ2hhcmdlZEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyJyxcbiAgICAgIG1ldHJpY05hbWU6ICdDUFVTdXJwbHVzQ3JlZGl0c0NoYXJnZWQnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcHVVdGlsaXphdGlvbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG4gIHB1YmxpYyBzdGF0aWMgY3B1VXRpbGl6YXRpb25BdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7IEltYWdlSWQ6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbWFnZUlkOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgY3B1VXRpbGl6YXRpb25BdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgY3B1VXRpbGl6YXRpb25BdmVyYWdlKGRpbWVuc2lvbnM6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyJyxcbiAgICAgIG1ldHJpY05hbWU6ICdDUFVVdGlsaXphdGlvbicsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZEJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW1hZ2VJZDogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9FQzInLFxuICAgICAgbWV0cmljTmFtZTogJ0Rpc2tSZWFkQnl0ZXMnLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZE9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkT3BzQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkT3BzQXZlcmFnZShkaW1lbnNpb25zOiB7IEltYWdlSWQ6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbWFnZUlkOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyJyxcbiAgICAgIG1ldHJpY05hbWU6ICdEaXNrUmVhZE9wcycsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZUJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW1hZ2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZVR5cGU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZVR5cGU6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9FQzInLFxuICAgICAgbWV0cmljTmFtZTogJ0Rpc2tXcml0ZUJ5dGVzJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlT3BzQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlT3BzQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlT3BzQXZlcmFnZShkaW1lbnNpb25zOiB7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW1hZ2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VUeXBlOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlT3BzQXZlcmFnZShkaW1lbnNpb25zOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VDMicsXG4gICAgICBtZXRyaWNOYW1lOiAnRGlza1dyaXRlT3BzJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgbWV0YWRhdGFOb1Rva2VuU3VtKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBtZXRhZGF0YU5vVG9rZW5TdW0oZGltZW5zaW9uczogeyAgfSk6IE1ldHJpY1dpdGhEaW1zPHsgIH0+O1xuICBwdWJsaWMgc3RhdGljIG1ldGFkYXRhTm9Ub2tlblN1bShkaW1lbnNpb25zOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VDMicsXG4gICAgICBtZXRyaWNOYW1lOiAnTWV0YWRhdGFOb1Rva2VuJyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmcgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW1hZ2VJZDogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZVR5cGU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZVR5cGU6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvRUMyJyxcbiAgICAgIG1ldHJpY05hbWU6ICdOZXR3b3JrSW4nLFxuICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmcgfT47XG4gIHB1YmxpYyBzdGF0aWMgbmV0d29ya091dEF2ZXJhZ2UoZGltZW5zaW9uczogeyAgfSk6IE1ldHJpY1dpdGhEaW1zPHsgIH0+O1xuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtPdXRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtPdXRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW1hZ2VJZDogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZyB9PjtcbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlVHlwZTogc3RyaW5nIH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlVHlwZTogc3RyaW5nIH0+O1xuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtPdXRBdmVyYWd