text:
//
// Copyright 2010-2016 Amazon.com, Inc. or its affiliates. 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.
// A copy of the License is located at
//
// http://aws.amazon.com/apache2.0
//
// or in the "license" file accompanying this file. This file 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.
//

#import "AWSCognitoIdentity.h"

#import "AWSNetworking.h"
#import "AWSCategory.h"
#import "AWSNetworking.h"
#import "AWSSignature.h"
#import "AWSService.h"
#import "AWSNetworking.h"
#import "AWSURLRequestSerialization.h"
#import "AWSURLResponseSerialization.h"
#import "AWSURLRequestRetryHandler.h"
#import "AWSSynchronizedMutableDictionary.h"
#import "AWSCognitoIdentityResources.h"

#import "FABKitProtocol.h"
#import "Fabric+FABKits.h"

@interface AWSCognitoIdentityResponseSerializer : AWSJSONResponseSerializer

@end

@implementation AWSCognitoIdentityResponseSerializer

#pragma mark - Service errors

static NSDictionary *errorCodeDictionary = nil;
+ (void)initialize {
    errorCodeDictionary = @{
                            @"IncompleteSignature" : @(AWSCognitoIdentityErrorIncompleteSignature),
                            @"InvalidClientTokenId" : @(AWSCognitoIdentityErrorInvalidClientTokenId),
                            @"MissingAuthenticationToken" : @(AWSCognitoIdentityErrorMissingAuthenticationToken),
                            @"DeveloperUserAlreadyRegisteredException" : @(AWSCognitoIdentityErrorDeveloperUserAlreadyRegistered),
                            @"ExternalServiceException" : @(AWSCognitoIdentityErrorExternalService),
                            @"InternalErrorException" : @(AWSCognitoIdentityErrorInternalError),
                            @"InvalidIdentityPoolConfigurationException" : @(AWSCognitoIdentityErrorInvalidIdentityPoolConfiguration),
                            @"InvalidParameterException" : @(AWSCognitoIdentityErrorInvalidParameter),
                            @"LimitExceededException" : @(AWSCognitoIdentityErrorLimitExceeded),
                            @"NotAuthorizedException" : @(AWSCognitoIdentityErrorNotAuthorized),
                            @"ResourceConflictException" : @(AWSCognitoIdentityErrorResourceConflict),
                            @"ResourceNotFoundException" : @(AWSCognitoIdentityErrorResourceNotFound),
                            @"TooManyRequestsException" : @(AWSCognitoIdentityErrorTooManyRequests),
                            };
}

- (id)responseObjectForResponse:(NSHTTPURLResponse *)response
                originalRequest:(NSURLRequest *)originalRequest
                 currentRequest:(NSURLRequest *)currentRequest
                           data:(id)data
                          error:(NSError *__autoreleasing *)error {
    id responseObject = [super responseObjectForResponse:response
                                         originalRequest:originalRequest
                                          currentRequest:currentRequest
                                                    data:data
                                                   error:error];
    if (!*error && [responseObject isKindOfClass:[NSDictionary class]]) {
        if ([errorCodeDictionary objectForKey:[[[responseObject objectForKey:@"__type"] componentsSeparatedByString:@"#"] lastObject]]) {
            if (error) {
                *error = [NSError errorWithDomain:AWSCognitoIdentityErrorDomain
                                             code:[[errorCodeDictionary objectForKey:[[[responseObject objectForKey:@"__type"] componentsSeparatedByString:@"#"] lastObject]] integerValue]
                                         userInfo:responseObject];
            }
            return responseObject;
        } else if ([[[responseObject objectForKey:@"__type"] componentsSeparatedByString:@"#"] lastObject]) {
            if (error) {
                *error = [NSError errorWithDomain:AWSCognitoIdentityErrorDomain
                                             code:AWSCognitoIdentityErrorUnknown
                                         userInfo:responseObject];
            }
            return responseObject;
        }
    }

    if (!*error && response.statusCode/100 != 2) {
        *error = [NSError errorWithDomain:AWSCognitoIdentityErrorDomain
                                     code:AWSCognitoIdentityErrorUnknown
                                 userInfo:nil];
    }

    if (!*error && [responseObject isKindOfClass:[NSDictionary class]]) {
        if (self.outputClass) {
            responseObject = [AWSMTLJSONAdapter modelOfClass:self.outputClass
                                          fromJSONDictionary:responseObject
                                                       error:error];
        }
    }

    return responseObject;
}

@end

@interface AWSCognitoIdentityRequestRetryHandler : AWSURLRequestRetryHandler

@end

@implementation AWSCognitoIdentityRequestRetryHandler

- (AWSNetworkingRetryType)shouldRetry:(uint32_t)currentRetryCount
                             response:(NSHTTPURLResponse *)response
                                 data:(NSData *)data
                                error:(NSError *)error {
    AWSNetworkingRetryType retryType = [super shouldRetry:currentRetryCount
                                                 response:response
                                                     data:data
                                                    error:error];
    if(retryType == AWSNetworkingRetryTypeShouldNotRetry
       && [error.domain isEqualToString:AWSCognitoIdentityErrorDomain]
       && currentRetryCount < self.maxRetryCount) {
        switch (error.code) {
            case AWSCognitoIdentityErrorIncompleteSignature:
            case AWSCognitoIdentityErrorInvalidClientTokenId:
            case AWSCognitoIdentityErrorMissingAuthenticationToken:
                retryType = AWSNetworkingRetryTypeShouldRefreshCredentialsAndRetry;
                break;

            default:
                break;
        }
    }

    return retryType;
}

@end

@interface AWSRequest()

@property (nonatomic, strong) AWSNetworkingRequest *internalRequest;

@end

@interface AWSCognitoIdentity() <FABKit>

@property (nonatomic, strong) AWSNetworking *networking;
@property (nonatomic, strong) AWSServiceConfiguration *configuration;

@end

@interface AWSServiceConfiguration()

@property (nonatomic, strong) AWSEndpoint *endpoint;

@end

@implementation AWSCognitoIdentity

static AWSSynchronizedMutableDictionary *_serviceClients = nil;

#pragma mark - Fabric

+ (NSString *)bundleIdentifier {
    return @"com.amazonaws.sdk.ios.AWSCognitoIdentity";
}

+ (NSString *)kitDisplayVersion {
    return AWSiOSSDKVersion;
}

+ (void)internalInitializeIfNeeded {
    // Retrieves the configuration from info.plist.
    Class fabricClass = NSClassFromString(@"Fabric");
    if (fabricClass
        && [fabricClass respondsToSelector:@selector(configurationDictionaryForKitClass:)]) {
        NSDictionary *configurationDictionary = [fabricClass configurationDictionaryForKitClass:[AWSCognitoIdentity class]];
        NSString *defaultRegionTypeString = configurationDictionary[@"AWSDefaultRegionType"];
        AWSRegionType defaultRegionType = [self regionTypeFromString:defaultRegionTypeString];
        NSString *cognitoIdentityRegionTypeString = configurationDictionary[@"AWSCognitoIdentityRegionType"];
        AWSRegionType cognitoIdentityRegionType = [self regionTypeFromString:cognitoIdentityRegionTypeString];
        NSString *cognitoIdentityPoolId = configurationDictionary[@"AWSCognitoIdentityPoolId"];

        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            // Performs some basic configuration check.
            if (cognitoIdentityPoolId
                && defaultRegionType != AWSRegionUnknown
                && cognitoIdentityRegionType != AWSRegionUnknown) {
                // Sets up the AWS Mobile SDK.
                AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:cognitoIdentityRegionType
                                                                                identityPoolId:cognitoIdentityPoolId];
                AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:defaultRegionType
                                                                                credentialsProvider:credentialsProvider];
                [configuration addUserAgentProductToken:@"fabric"];
                AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
                AWSLogInfo(@"The default Cognito credentials provider and service configuration were successfully initialized.");
            } else {
                // The configuration values from info.plist seem invalid.
                AWSLogWarn(@"Could not find valid 'AWSDefaultRegionType', 'AWSCognitoRegionType', and 'AWSCognitoIdentityPoolId' values in info.plist. Unable to set the default Cognito credentials provider and service configuration. Please follow the instructions on this website and manually set up the AWS Mobile SDK for iOS. http://docs.aws.amazon.com/mobile/sdkforios/developerguide/setup.html");
            }
        });
    } else {
        AWSLogError(@"Fabric is not available.");
    }
}

// Converts a region string to AWSRegionType.
+ (AWSRegionType)regionTypeFromString:(NSString *)regionTypeString {
    if ([regionTypeString isEqualToString:@"AWSRegionUSEast1"]) {
        return AWSRegionUSEast1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionUSWest1"]) {
        return AWSRegionUSWest1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionUSWest2"]) {
        return AWSRegionUSWest2;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionEUWest1"]) {
        return AWSRegionEUWest1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionEUCentral1"]) {
        return AWSRegionEUCentral1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionAPSoutheast1"]) {
        return AWSRegionAPSoutheast1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionAPNortheast1"]) {
        return AWSRegionAPNortheast1;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionAPNortheast2"]) {
        return AWSRegionAPNortheast2;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionAPSoutheast2"]) {
        return AWSRegionAPSoutheast2;
    }
    if ([regionTypeString isEqualToString:@"AWSRegionSAEast1"]) {
        return AWSRegionSAEast1;
    }
    /*
     Amazon Cognito Identity is not support in the China region.
     if ([regionTypeString isEqualToString:@"AWSRegionCNNorth1"]) {
     return AWSRegionCNNorth1;
     }
     */

    return AWSRegionUnknown;
}

#pragma mark - Setup

+ (instancetype)defaultCognitoIdentity {
    if (![AWSServiceManager defaultServiceManager].defaultServiceConfiguration) {
        @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                       reason:@"`defaultServiceConfiguration` is `nil`. You need to set it before using this method."
                                     userInfo:nil];
    }

    static AWSCognitoIdentity *_defaultCognitoIdentity = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        _defaultCognitoIdentity = [[AWSCognitoIdentity alloc] initWithConfiguration:AWSServiceManager.defaultServiceManager.defaultServiceConfiguration];
#pragma clang diagnostic pop
    });

    return _defaultCognitoIdentity;
}

+ (void)registerCognitoIdentityWithConfiguration:(AWSServiceConfiguration *)configuration forKey:(NSString *)key {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _serviceClients = [AWSSynchronizedMutableDictionary new];
    });
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [_serviceClients setObject:[[AWSCognitoIdentity alloc] initWithConfiguration:configuration]
                        forKey:key];
#pragma clang diagnostic pop
}

+ (instancetype)CognitoIdentityForKey:(NSString *)key {
    return [_serviceClients objectForKey:key];
}

+ (void)removeCognitoIdentityForKey:(NSString *)key {
    [_serviceClients removeObjectForKey:key];
}

- (instancetype)init {
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                   reason:@"`- init` is not a valid initializer. Use `+ defaultCognitoIdentity` or `+ CognitoIdentityForKey:` instead."
                                 userInfo:nil];
    return nil;
}

- (instancetype)initWithConfiguration:(AWSServiceConfiguration *)configuration {
    if (self = [super init]) {
        _configuration = [configuration copy];

        _configuration.endpoint = [[AWSEndpoint alloc] initWithRegion:_configuration.regionType
                                                              service:AWSServiceCognitoIdentity
                                                         useUnsafeURL:NO];

        AWSSignatureV4Signer *signer = [[AWSSignatureV4Signer alloc] initWithCredentialsProvider:_configuration.credentialsProvider
                                                                                endpoint:_configuration.endpoint];
        AWSNetworkingRequestInterceptor *baseInterceptor = [[AWSNetworkingRequestInterceptor alloc] initWithUserAgent:_configuration.userAgent];
        _configuration.requestInterceptors = @[baseInterceptor, signer];

        _configuration.baseURL = _configuration.endpoint.URL;
        _configuration.retryHandler = [[AWSCognitoIdentityRequestRetryHandler alloc] initWithMaximumRetryCount:_configuration.maxRetryCount];
        _configuration.headers = @{@"Content-Type" : @"application/x-amz-json-1.1"};

        _networking = [[AWSNetworking alloc] initWithConfiguration:_configuration];
    }

    return self;
}

- (AWSTask *)invokeRequest:(AWSRequest *)request
               HTTPMethod:(AWSHTTPMethod)HTTPMethod
                URLString:(NSString *) URLString
             targetPrefix:(NSString *)targetPrefix
            operationName:(NSString *)operationName
              outputClass:(Class)outputClass {

    @autoreleasepool {
        if (!request) {
            request = [AWSRequest new];
        }

        AWSNetworkingRequest *networkingRequest = request.internalRequest;
        if (request) {
            networkingRequest.parameters = [[AWSMTLJSONAdapter JSONDictionaryFromModel:request] aws_removeNullValues];
        } else {
            networkingRequest.parameters = @{};
        }

        NSMutableDictionary *parameters = [NSMutableDictionary new];
        __block NSString *blockSafeURLString = [URLString copy];
        [networkingRequest.parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            NSString *stringToFind = [NSString stringWithFormat:@"{%@}", key];
            if ([blockSafeURLString rangeOfString:stringToFind].location == NSNotFound) {
                [parameters setObject:obj forKey:key];
            } else {
                blockSafeURLString = [blockSafeURLString stringByReplacingOccurrencesOfString:stringToFind
                                                                                withString:obj];
            }
        }];
        networkingRequest.parameters = parameters;

        NSMutableDictionary *headers = [NSMutableDictionary new];
        headers[@"X-Amz-Target"] = [NSString stringWithFormat:@"%@.%@", targetPrefix, operationName];

        networkingRequest.headers = headers;
        networkingRequest.URLString = blockSafeURLString;
        networkingRequest.HTTPMethod = HTTPMethod;
        networkingRequest.requestSerializer = [[AWSJSONRequestSerializer alloc] initWithJSONDefinition:[[AWSCognitoIdentityResources sharedInstance] JSONObject]
                                                                                actionName:operationName];
        networkingRequest.responseSerializer = [[AWSCognitoIdentityResponseSerializer alloc] initWithJSONDefinition:[[AWSCognitoIdentityResources sharedInstance] JSONObject]
                                                                                actionName:operationName
                                                                                outputClass:outputClass];
        return [self.networking sendRequest:networkingRequest];
    }
}

#pragma mark - Service method

- (AWSTask<AWSCognitoIdentityIdentityPool *> *)createIdentityPool:(AWSCognitoIdentityCreateIdentityPoolInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"CreateIdentityPool"
                   outputClass:[AWSCognitoIdentityIdentityPool class]];
}

- (void)createIdentityPool:(AWSCognitoIdentityCreateIdentityPoolInput *)request
         completionHandler:(void (^)(AWSCognitoIdentityIdentityPool *response, NSError *error))completionHandler {
    [[self createIdentityPool:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityIdentityPool *> * _Nonnull task) {
        AWSCognitoIdentityIdentityPool *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask *)deleteIdentityPool:(AWSCognitoIdentityDeleteIdentityPoolInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"DeleteIdentityPool"
                   outputClass:nil];
}

- (void)deleteIdentityPool:(AWSCognitoIdentityDeleteIdentityPoolInput *)request
         completionHandler:(void (^)(NSError *error))completionHandler {
    [[self deleteIdentityPool:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityIdentityDescription *> *)describeIdentity:(AWSCognitoIdentityDescribeIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"DescribeIdentity"
                   outputClass:[AWSCognitoIdentityIdentityDescription class]];
}

- (void)describeIdentity:(AWSCognitoIdentityDescribeIdentityInput *)request
       completionHandler:(void (^)(AWSCognitoIdentityIdentityDescription *response, NSError *error))completionHandler {
    [[self describeIdentity:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityIdentityDescription *> * _Nonnull task) {
        AWSCognitoIdentityIdentityDescription *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityIdentityPool *> *)describeIdentityPool:(AWSCognitoIdentityDescribeIdentityPoolInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"DescribeIdentityPool"
                   outputClass:[AWSCognitoIdentityIdentityPool class]];
}

- (void)describeIdentityPool:(AWSCognitoIdentityDescribeIdentityPoolInput *)request
           completionHandler:(void (^)(AWSCognitoIdentityIdentityPool *response, NSError *error))completionHandler {
    [[self describeIdentityPool:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityIdentityPool *> * _Nonnull task) {
        AWSCognitoIdentityIdentityPool *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityGetCredentialsForIdentityResponse *> *)getCredentialsForIdentity:(AWSCognitoIdentityGetCredentialsForIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"GetCredentialsForIdentity"
                   outputClass:[AWSCognitoIdentityGetCredentialsForIdentityResponse class]];
}

- (void)getCredentialsForIdentity:(AWSCognitoIdentityGetCredentialsForIdentityInput *)request
                completionHandler:(void (^)(AWSCognitoIdentityGetCredentialsForIdentityResponse *response, NSError *error))completionHandler {
    [[self getCredentialsForIdentity:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityGetCredentialsForIdentityResponse *> * _Nonnull task) {
        AWSCognitoIdentityGetCredentialsForIdentityResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityGetIdResponse *> *)getId:(AWSCognitoIdentityGetIdInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"GetId"
                   outputClass:[AWSCognitoIdentityGetIdResponse class]];
}

- (void)getId:(AWSCognitoIdentityGetIdInput *)request
completionHandler:(void (^)(AWSCognitoIdentityGetIdResponse *response, NSError *error))completionHandler {
    [[self getId:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityGetIdResponse *> * _Nonnull task) {
        AWSCognitoIdentityGetIdResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityGetIdentityPoolRolesResponse *> *)getIdentityPoolRoles:(AWSCognitoIdentityGetIdentityPoolRolesInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"GetIdentityPoolRoles"
                   outputClass:[AWSCognitoIdentityGetIdentityPoolRolesResponse class]];
}

- (void)getIdentityPoolRoles:(AWSCognitoIdentityGetIdentityPoolRolesInput *)request
           completionHandler:(void (^)(AWSCognitoIdentityGetIdentityPoolRolesResponse *response, NSError *error))completionHandler {
    [[self getIdentityPoolRoles:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityGetIdentityPoolRolesResponse *> * _Nonnull task) {
        AWSCognitoIdentityGetIdentityPoolRolesResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityGetOpenIdTokenResponse *> *)getOpenIdToken:(AWSCognitoIdentityGetOpenIdTokenInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"GetOpenIdToken"
                   outputClass:[AWSCognitoIdentityGetOpenIdTokenResponse class]];
}

- (void)getOpenIdToken:(AWSCognitoIdentityGetOpenIdTokenInput *)request
     completionHandler:(void (^)(AWSCognitoIdentityGetOpenIdTokenResponse *response, NSError *error))completionHandler {
    [[self getOpenIdToken:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityGetOpenIdTokenResponse *> * _Nonnull task) {
        AWSCognitoIdentityGetOpenIdTokenResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityResponse *> *)getOpenIdTokenForDeveloperIdentity:(AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"GetOpenIdTokenForDeveloperIdentity"
                   outputClass:[AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityResponse class]];
}

- (void)getOpenIdTokenForDeveloperIdentity:(AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityInput *)request
                         completionHandler:(void (^)(AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityResponse *response, NSError *error))completionHandler {
    [[self getOpenIdTokenForDeveloperIdentity:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityResponse *> * _Nonnull task) {
        AWSCognitoIdentityGetOpenIdTokenForDeveloperIdentityResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityListIdentitiesResponse *> *)listIdentities:(AWSCognitoIdentityListIdentitiesInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"ListIdentities"
                   outputClass:[AWSCognitoIdentityListIdentitiesResponse class]];
}

- (void)listIdentities:(AWSCognitoIdentityListIdentitiesInput *)request
     completionHandler:(void (^)(AWSCognitoIdentityListIdentitiesResponse *response, NSError *error))completionHandler {
    [[self listIdentities:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityListIdentitiesResponse *> * _Nonnull task) {
        AWSCognitoIdentityListIdentitiesResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityListIdentityPoolsResponse *> *)listIdentityPools:(AWSCognitoIdentityListIdentityPoolsInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"ListIdentityPools"
                   outputClass:[AWSCognitoIdentityListIdentityPoolsResponse class]];
}

- (void)listIdentityPools:(AWSCognitoIdentityListIdentityPoolsInput *)request
        completionHandler:(void (^)(AWSCognitoIdentityListIdentityPoolsResponse *response, NSError *error))completionHandler {
    [[self listIdentityPools:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityListIdentityPoolsResponse *> * _Nonnull task) {
        AWSCognitoIdentityListIdentityPoolsResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityLookupDeveloperIdentityResponse *> *)lookupDeveloperIdentity:(AWSCognitoIdentityLookupDeveloperIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"LookupDeveloperIdentity"
                   outputClass:[AWSCognitoIdentityLookupDeveloperIdentityResponse class]];
}

- (void)lookupDeveloperIdentity:(AWSCognitoIdentityLookupDeveloperIdentityInput *)request
              completionHandler:(void (^)(AWSCognitoIdentityLookupDeveloperIdentityResponse *response, NSError *error))completionHandler {
    [[self lookupDeveloperIdentity:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityLookupDeveloperIdentityResponse *> * _Nonnull task) {
        AWSCognitoIdentityLookupDeveloperIdentityResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityMergeDeveloperIdentitiesResponse *> *)mergeDeveloperIdentities:(AWSCognitoIdentityMergeDeveloperIdentitiesInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"MergeDeveloperIdentities"
                   outputClass:[AWSCognitoIdentityMergeDeveloperIdentitiesResponse class]];
}

- (void)mergeDeveloperIdentities:(AWSCognitoIdentityMergeDeveloperIdentitiesInput *)request
               completionHandler:(void (^)(AWSCognitoIdentityMergeDeveloperIdentitiesResponse *response, NSError *error))completionHandler {
    [[self mergeDeveloperIdentities:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityMergeDeveloperIdentitiesResponse *> * _Nonnull task) {
        AWSCognitoIdentityMergeDeveloperIdentitiesResponse *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

- (AWSTask *)setIdentityPoolRoles:(AWSCognitoIdentitySetIdentityPoolRolesInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"SetIdentityPoolRoles"
                   outputClass:nil];
}

- (void)setIdentityPoolRoles:(AWSCognitoIdentitySetIdentityPoolRolesInput *)request
           completionHandler:(void (^)(NSError *error))completionHandler {
    [[self setIdentityPoolRoles:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(error);
        }

        return nil;
    }];
}

- (AWSTask *)unlinkDeveloperIdentity:(AWSCognitoIdentityUnlinkDeveloperIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"UnlinkDeveloperIdentity"
                   outputClass:nil];
}

- (void)unlinkDeveloperIdentity:(AWSCognitoIdentityUnlinkDeveloperIdentityInput *)request
              completionHandler:(void (^)(NSError *error))completionHandler {
    [[self unlinkDeveloperIdentity:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(error);
        }

        return nil;
    }];
}

- (AWSTask *)unlinkIdentity:(AWSCognitoIdentityUnlinkIdentityInput *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"UnlinkIdentity"
                   outputClass:nil];
}

- (void)unlinkIdentity:(AWSCognitoIdentityUnlinkIdentityInput *)request
     completionHandler:(void (^)(NSError *error))completionHandler {
    [[self unlinkIdentity:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(error);
        }

        return nil;
    }];
}

- (AWSTask<AWSCognitoIdentityIdentityPool *> *)updateIdentityPool:(AWSCognitoIdentityIdentityPool *)request {
    return [self invokeRequest:request
                    HTTPMethod:AWSHTTPMethodPOST
                     URLString:@""
                  targetPrefix:@"AWSCognitoIdentityService"
                 operationName:@"UpdateIdentityPool"
                   outputClass:[AWSCognitoIdentityIdentityPool class]];
}

- (void)updateIdentityPool:(AWSCognitoIdentityIdentityPool *)request
         completionHandler:(void (^)(AWSCognitoIdentityIdentityPool *response, NSError *error))completionHandler {
    [[self updateIdentityPool:request] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityIdentityPool *> * _Nonnull task) {
        AWSCognitoIdentityIdentityPool *result = task.result;
        NSError *error = task.error;

        if (task.exception) {
            AWSLogError(@"Fatal exception: [%@]", task.exception);
            kill(getpid(), SIGKILL);
        }

        if (completionHandler) {
            completionHandler(result, error);
        }

        return nil;
    }];
}

@end


Just shuffle, draw and exercise — no need for expensive gym equipment!
Use the popular FitDeck Stretch cards to improve performance and circulation.
Stretching helps to reduce muscle stiffness and fends off potential repetitive stress injuries.
Designed for all fitness levels, beginner to advance.


text:
by OtakuAni September 26, 2018, 12:18 am 86 Views 1 Comment
This month has been glorious for many Tokyo Ghoul fans eagerly awaiting for newly anticipated content. First, the live-action film Tokyo Ghoul: The Movie is being released in various American theatres with subtitles in mid-October.
It already has very positive reviews from critics for the production's story, art, and music adaptation. Secondly, the much-anticipated Tokyo Ghoul: Re is expected to release on October 17th. But, the good news thankfully does not stop here (or so we hope).
Weekly Young Jump, a popular weekly-published manga magazine, announced there will be "a major announcement" with Tokyo Ghoul: Re; this announcement is projected to occur on October 12th. That's right! An announcement about an announcement!
Many fans are vehemently debating what the ominous announcement entails; this should be expected since the anime series has essentially been on recess since 2015. To make this perfectly clear, no one knows exactly what will happen, but three theories have triumphed through the midst of dialogue:
The current manga series will end, the birth of a third manga series, or the creation of a third anime production. Of course, the final option is the series ends entirely but many do not expect this to occur due to the overwhelming popularity of the series within the past two years. Furthermore, it would not make sense from a marketing standpoint to announce the ending of the series right before the launching of Tokyo Ghoul: Re.
Nonetheless, the announcement has many Tokyo Ghoul fans ecstatic and eagerly awaiting. Can you blame them? The series is one of the highest-rated series. Funimation users rank it 4.5/5 stars, Hulu 4.8/5 stars, and above 8 stars on virtually every other platform (and you know how critics can be).
Bad News For One Punch Man Season 2
Follow OtakuAni on Facebook and Twitter for more updates on TV Shows, Dragon Ball Super, Anime, Movies, Game and all Geek culture.
AnimeMangaNewsTokyo Ghoul
Previous article Owner Of Ancient Weapon Uranus In One Piece?
Next article Dragon Ball Super: What Would be Vegeta's Role In Tournament of Power?
in Anime, Manga, My Hero Academia, News
My Hero Academia Season 3 Officially Confirmed, Release Date, Storyline
in Anime, Dragon Ball Super, Manga
The Real Reason Why Goku used SSG instead of Blue in DBS EP 104
in Anime, Dragon Ball Super, News
Goku vs Jiren vs Hit! Epic Battle About To Start! Dragon Ball Super – EXPLAINED!!
GOKU VS JIREN! More Leaked Information and Spoilers?! Dragon Ball Super Episodes 109-110
More From: Anime
by OtakuAni June 2, 2019, 5:41 pm
by OtakuAni April 8, 2019, 12:53 pm
by OtakuAni March 29, 2019, 3:17 pm
Goku's New Transformation's NAME Revealed – Dragon Ball Super
by OtakuAni February 4, 2019, 1:20 pm
Dragon Ball Voice Actor Passes Away At The Age Of 89
by OtakuAni February 4, 2019, 1:44 am
massage foot says:
Wow! At last I got a webpage from where I can really take valuable information regarding my
Dragon Ball Super: What Would be Vegeta's Role In Tournament of Power?

redpajama_set_name: RedPajamaCommonCrawl


I've got a PC on which Firefox 42.0 is installed.
I would like to update the 42.0 vesion on that PC. After clicking on the "Check for update" button in the "About Firefox" menu, I got a message that it can be updated to version 43.0.1.
I couldn't use version 40.2 to post this question because when I clicked on the "None of these solves my problem" button, version 40.2 crashed. So I used version 49.0 on the same PC instead.
Version 42.0 also crashes when I click on "Troubleshooting information" under the Hep menu.
Hi, I've got a PC on which Firefox 42.0 is installed. I would like to update the 42.0 vesion on that PC. After clicking on the "Check for update" button in the "About Firefox" menu, I got a message that it can be updated to version 43.0.1. Why not newer versions? PS: I couldn't use version 40.2 to post this question because when I clicked on the "None of these solves my problem" button, version 40.2 crashed. So I used version 49.0 on the same PC instead. Version 42.0 also crashes when I click on "Troubleshooting information" under the Hep menu.
43.0.1 was served to Windows users using older versions at the time due to Windows XP and Vista users in mind. WinXP/Vista users were also served 43.0.1 on mozilla.org at the time to then update from. Firefox Release setups from versions 43.0.2 to 48.0.2 were signed in a way that WinXP SP1 and users not updating Vista enough could not run them. Then there was the 47.0.2 which was a transition Release for those who were using 47.0.1 or older to check for a couple things on Windows.
Oh, I see. Something like a qualification check before promotion.
Oh, I see. Something like a qualification check before promotion. Thank you.


Link to auction site is not available.
The auction ends this friday already?
The auction will be ended in about 30 hours. Here are some highlights.
Thank you for sharing the link Poconopenn! If you would be so kind and pls share the link for completed auction sales I would greatly appreciate it!!
Here is the link to the completed list. It covers auction ended this morning, 2016 Fall, 2017 Spring, 2017 Fall and 2018 Spring auctions. There is clear trend that circulated coins, especially proof coins are doing very fine in this down market. The same link will work for auction ended on 7/17.


text:
'use strict';

describe('Directive: leaflet', function () {

  // load the directive's module
  beforeEach(module('bachelorApp'));

  var element,
    scope;

  beforeEach(inject(function ($rootScope) {
    scope = $rootScope.$new();
  }));

  it('should make hidden element visible', inject(function ($compile) {
    element = angular.element('<leaflet></leaflet>');
    element = $compile(element)(scope);
    expect(element.text()).toBe('this is the leaflet directive');
  }));
});

redpajama_set_name: RedPajamaGithub


text:
vancouverites
SKOOKUM whets our appetite for next year̵... Return to What's on in Vancouver theatre for Octo...
Halloween Mayhem and Decadent Pies Collide in Vancouver's Gastown
by Tara Lee	in Entertainment on September 13, 2018
olleen Winton as Mrs. Lovett and Warren Kimmel as Sweeney Todd in The Snapshots Collective's production of Sweeney Todd
The next time you're digging into a slice of pie, you might faintly hear a sinister laugh in the distance. You'll keep on eating but the laugh will get louder and more threatening.
This ghoulish scenario will be part of an upcoming production of Sweeney Todd: The Demon Barber of Fleet Street that brings together the sweetness of pies and the bitterness of murder.
The Snapshots Collective's mounting of Sweeney Todd: The Demon Barber of Fleet Street runs from October 1-31, 2018, at Mrs. Lovett's Pie Shop (348 Water Street) in the city's historic and picturesque Gastown.
Director Chris Adams and choreographer Nicol Spinola were inspired by Tim Burton's filmic rendition of the Stephen Sondheim and Hugh Wheeler-created musical when Adams and Spinola were collaborating on this site-specific production. Audiences will be immersed in the macabre 19th century tale of Sweeney Todd, a barber who was wrongly sent to an Australian prison for fifteen years by Judge Turpin. During that time, he was tragically separated from his beloved wife and daughter.
Warren Kimmel as Sweeney Todd in The Snapshots Collective's production of Sweeney Todd
But Todd has returned and is looking to enact vengeance, forming an unholy and very lucrative alliance with Mrs. Lovett who has a meat pie shop below Todd's new barbershop. When razors meet pastry, delicious savagery is sure to ensue.
The musical score by Sondheim is sure to thrill, delight, and cause suspenseful chills with iconic songs like "Not While I'm Around" and "Pretty Women." The talented local cast includes Warren Kimmel as Todd, Colleen Winton as Lovett, and Stephen Aberle as Turpin.
Colleen Winton as Mrs. Lovett in The Snapshots Collective's production of Sweeney Todd
To make the experience even more immersive, audience members will be able to feast on pies (from the Pie Hole). When they book their tickets, they'll be able to choose between steak and stout, Thai coconut curry (vegan), and Moroccan chickpea (vegetarian).
The production is an ideal theatrical experience for the Halloween season (eg cozy up to your date in terror!). Especially in the cobbled surroundings of Gastown, Sweeney Todd will most certainly come to horrifying life (and death). And with pie to sweeten the slasher deal, how can you resist?
Further info and tickets are available on-line.
Tagged: Gastown, Sweeney Todd: The Demon Barber of Fleet Street, The Snapshots Collective
3 Responses to Halloween Mayhem and Decadent Pies Collide in Vancouver's Gastown
jmcg
The dates are incorrect.
The show runs from Oct 10-31st
not 1-31
one dollar hosting
Monday, 17 Sep 2018
Halloween is a festival in US. Is it a name of a person also?
Tuesday, 25 Sep 2018
thank for the post
Things to Do in Vancouver This Week...
Filming in Vancouver: Katherine Hei...
January's Vancouver Hike of the Mon...
ENTER TO WIN Four Tickets to Nation...
5 DIY events in Vancouver to embrac...
Purhar
Hardcastle
Eyton
WIN TICKETS to Les Ballets Trockadero de Monte...
ENTER TO WIN Four Tickets to National Geograph...
Cinematheque's Best of the Decade kicks...
All Male-Ballerina Troupe Set to Twirl Again i...
City Opera Vancouver Satirizes 1930s Berlin in...
King Princess, Trail of Dead, and more concert...
Inside Vancouver is a multi-author blog, written by Vancouverites about Vancouver. Our goal is to give an insider's view of Vancouver, to provide information, stories and opinions from the locals' perspective about this great city.
Read more about Tourism Vancouver
© 2020 Tourism Vancouver. The material on this website may not be cached, distributed, reproduced, transmitted, or otherwise used without the prior permission of Tourism Vancouver.


text:
The Dodos "Confidence" (video)
Arty indie-folk duo the Dodos have shared a new music video for their Carrier album track "Confidence."
The cinematic clip follows a suburb-set narrative where a moustache-sporting, house coat-wearing creep is on the run from the law. It's a little goofy, but the shots are well-done, making it worth the watch.
Check out the video for "Confidence" below.
More Dodos
The Dodos Share New Single "The Atlantic"
The Dodos have shared a brand new track today called "The Atlantic." It comes as a one-off from the band, their second of the year following...
The Dodos / Palehound The 27 Club, Ottawa ON, November 5
Visiting the nation's capital for the third time in the past five years, the Dodos had to contend with chilly rains and a general Monday nig...
The Dodos Announce 'Certainty Waves' LP, Share New Song
The Dodos haven't released a new record in three years, but that's about to change with the arrival of Certainty Waves. It's due out October...
The Dodos "Goodbyes and Endings" (video)
A man has an extremely life-changing day in the new music video for "Goodbyes and Endings," a track from the Dodos' recent album Individ (ou...
The Dodos The Horseshoe Tavern, Toronto ON, March 3
After a decade of modest tinkering with both with their line-up and instantly recognizable sound, the Dodos appear to have followed a windin...


Since Pennsylvania's texting while driving ban went into effect just over a year ago, some 1,300 texting citations have been issued, according to AAA Mid-Atlantic. The new statute makes it a primary offense for a driver to send a text message while operating a motor vehicle.
The texting ban is certainly a step in the right direction, but many lawmakers and concerned citizens feel that it's still not enough to prevent distracted driving accidents. Under the new law, it's still okay to get out your cell phone and dial a number while driving.
Texting while driving ranks the most dangerous distracted driving activity, making you 23 times more likely to crash. However, use of handheld cell phones to receive or make calls and to engage in conversation is just as much a distraction.
Dialing a number while driving makes you 2.8 times more likely to crash, talking or listening on your phone makes you 1.3 times more at risk of an accident, and just reaching for your phone makes you 1.4 times more likely to wreck.
Any type of cell phone use behind the wheel is a recipe for disaster – and whether legal or illegal, you should always put your phone down while driving!


Drobo is looking for a talented and competitive Sales Representative that thrives in a quick sales cycle environment. The successful candidate will play a fundamental role in achieving our ambitious customer acquisition and revenue growth objectives. The Sales Representative is responsible for all commercial and consumer sales functions within an assigned account base. The Sales Representative is required to manage and develop their assigned accounts. The candidate will work to develop business relationships to best leverage and enable Drobo penetration across various market segment verticals.


text:
NATT commemorates the 200th Anniversary of the Merikins
On Thursday, April 28, 2016, the National Archives of Trinidad and Tobago (NATT) celebrated the 200th anniversary of the arrival of the Merikins and the re-publication of the seminal work by Dr. Maureen Warner-Lewis. This milestone event which also commemorated the International Decade for Persons of African Descent took place at the NATT's office at the Cor. New and St. Vincent Streets in Port of Spain.
Mr. Kurt Meyer, Deputy Permanent Secretary delivered the Feature Address on behalf of the Honourable Maxie Cuffie, Minister of Public Administration and Communications, in which he highlighted the enormous contribution made by persons of African descent to the national community. Also, addressing guests at the ceremony was Dr. Heather Cateau, Dean of the Faculty of Humanities and Education at the University of the West Indies who spoke about the African Legacy and the Merikins.
Over 100 guests were treated to performances from the Wasafoli Dancers who thrilled them with their West African styled dance while the Merikins followed with stick-fighting and drumming pieces. This event which was a collaboration with the Merikins Heritage Foundation and the Emancipation Support Committee formed part of the ongoing efforts to build an inclusive history and archives for Trinidad and Tobago.
The Ministry of Public Administration and Communications remains committed to the preservation of our history by providing the much needed support to the work of NATT.


Remember that the minimum wage for workers in Chicago and parts of Cook County increased July 1, to $12 an hour in Chicago and to $11 an hour in Cook — depending on where they work. Stay up-to-date with the necessary workplace posters to display. They're at www.cata.info/resources/workplace_posters.
About two-thirds of Cook's 134 suburban municipalities opted out of the county's ordinance to raise the minimum wage and grant employees up to five sick days a year. For workers in such areas, Illinois's $8.25 hourly minimum wage rate applies. The state rate was last raised July 1, 2010.


What Does Collectability Mean For Your Clients?
You might not think of a 1995 Impala as a collector's car, but for a new generation of collectors, that's exactly what it is. The list of most-collected cars among Millennials – people born between 1981 and 1996 - includes many1990- and 2000-era vehicles that don't fall into typical collectible categories. They're not muscle or sports cars. They're SUVs, station wagons, pickups, gas-sipper imports and souped-up family sedans. For insurance agents, your next client might not be into Corvettes. They might not be able to get enough of some unexpected car model that's the most valuable thing in the world - to them. It's your responsibility to educate yourself on what it means to be a collector today and redefine what it means to sell specialty insurance, especially to people of a certain age, their early twenties to late thirties. How can you tell? We've gathered a few clues.
Is your client's car value on the rise, controversial or difficult to pin down? This is one of the signs that they need specialty insurance for that vehicle. Typical policies focus on depreciation. In the event of a total loss, it will leave your client feeling horrified at the amount of lost value. Agreed value coverage will leave them much happier in the long run -and once they realize how affordable this type of policy can be, they'll likely be thrilled. Help them understand what agreed value means and how it could put them in a better financial place after a worst-case scenario with their collectible.
If your client tricked out their car with engine modifications, a flashy interior, an expensive audio system or a custom paint job, it's time to talk about specialty insurance. Same goes for cars from limited productions and special editions, plus cars purchased from famous people, perhaps through one of those flashy online auctions. These are all unique situations where the true value of the car can't be touched by a typical policy. A specialty policy offers better protection.
Are there more cars than drivers in the household? If so, you're looking at a collector, whether they completely identify with the description or not. Let's say you have a two-person household, husband and wife. They have three cars: two sedans they each drive to work on weekdays, plus a vintage Jeep they drive during weekend road trips. They might not feel like collectors, but they are. They're at high risk for an expensive vehicle loss, because they do so much driving for both work and pleasure.
Listen to the language they use when talking about their cars: baby, lady, pal, toy, "just for fun." Sometimes people use these words to downplay the value of their vehicles, because they don't want to come across as overly fond of a car. These clients aren't motorheads. They might say, "Aw, she's just an old friend for sunny days." Clearly, this is a special vehicle and needs specialty insurance. For this kind of client, you might need to do some gentle prodding that helps them understand the true value involved, and what it would mean to lose their old friend.


When it comes to pay per click campaigns, having the right partner makes all the difference in the world. As a leading Lawrence, MA PPC agency we know how to build a successful strategy. Getting the most out your PPC marketing is best accomplished when working with a partner that has years of expertise. As a professional marketing agency we will give your company the edge that it needs.
Why should I partner with a Lawrence, MA agency?
Competition in Lawrence can be fierce. Whoever pays the highest price for an ad wins, turning PPC into a real time online auction. A key service provided by PPC management companies is helping you understand what your competition is doing and how to position yourself against them.
Knowing the ins-and-outs of each ad platform is one of the benefits you receive by partnering with a Lawrence PPC agency. While planning the best approach for your campaign, a PPC firm will help you explore keyword selection, demographic and geographical targeting.


text:
National Press Club Video Talks
Richard Belzer Discusses Hit List
Actor Richard Belzer talks about "Hit List" May 6, 2013 at the National Press Club. The book is billed as an in-depth investigation into what some see as the mysterious deaths of people linked to the President John F. Kennedy assassination story.
Lewis Black Speaks at the National Press Club
Lewis Black, the comedian, playwright, and satirist who is perhaps best known for his frequent "Back in Black" appearances on Comedy Central's The Daily Show, addressed the National Press Club at a luncheon on April 14, 2014.
National Press Club Luncheon with Siskel and Ebert
Movie critics Roger Ebert and Gene Siskel discuss American movies with the National Press Club.
David McCullough: The American Story
From his Pulitzer-prize winning biographies John Adams and Truman, to his distinctive narration of Ken Burns' seminal documentaries "The Civil War" and "Baseball," David McCullough is perhaps America's most recognized storyteller.
Alan Greenspan: The Map and the Territory
Alan Greenspan discusses his latest book The Map and the Territory: Risk, Human Nature, and the Future of Forecasting in this talk at the National Press Club.
National Press Club Luncheon with Bob Newhart
Comedian Bob Newhart gave a lighthearted comedian's perspective on political campaigns.
NPC Newsmaker: Suze Orman & Tavis Smiley
Suze Orman, widely perceived as America's leading authority on personal finance, spoke about her "People First" movement on behalf of consumers to fight banks and their fees at a National Press Club Newsmaker event on Jan. 12, 2012.
Ayaan Hirsi Ali: ISIS, Islam, and the West
Ayaan Hirsi Ali, a best-selling author and outspoken critic of radical Islam, will speak at a National Press Club Newsmaker Luncheon on April 7.
Jon Stewart & Stephen Colbert Sanity & Fear Press Conference
Jon Stewart and Stephen Colbert address the media at a National Press Club news conference immediately following their "Rally to Restore Sanity and/or Fear" on the National Mall on October 30, 2010.
NPC Luncheon with Deepak Chopra
The most fundamental fact of existence is not the universe nor even space, time or gravity, but that we are of aware of the universe, Deepak Chopra, author or co-author of over 60 books on spirituality and mind-body connections, told a National Press Club luncheon audience April 4, 2012.
1 - 10 of 11 Titles


Except the short-lived .NATO top-level extension, the .EU domain extension is the only one in the world, which was planned for a single entity and is still in use. The top-level domain extension was launched in 2005 and since then has acquired substantial popularity amongst European users due to the fact that it pertains to a whole community rather than to a particular country. Indeed, the European Union is a single market that guarantees the free movement of goods and services, and with a .EU website, you can reach millions of would-be shoppers without restricting the site to a sole state as you would with a country-code top-level domain. The pan-European spirit of the domain is also underlined by the fact that the official website of the Union is europa.eu and that the EU institutions use 3rd-level domains under EUROPA.EU.
You can buy a dot EU domain name through our company with no more than a few clicks and it will go live only a few minutes later. With the modifications introduced by the Registry EURID in November 2012, .EU domains are administrated substantially easier – their WHOIS information can be edited at any time without additional fees and transfers are allowed with an EPP authorization code, which is valid for a single transfer at a time. In this way, you can effortlessly move over your dot EU domain name to our firm and control it through our Hepsia Control Panel interface. You will be able to edit its WHOIS contact details, to create Custom DNS records, to park and to forward your domain, etc. The sole requirement is that the Registrant ought to be an individual or an entity from one of the 27 member states of the EU. In this light, all notifications from EURID are sent to the owners both in English and in their local language, which makes dot EU domains even more accessible.
Don't want to deal with multiple Control Panels so that you can take care of a number of .EU domain names? We have what you need! AWP Hosting's Domain Manager will offer you total control over your domain names irrespective of their extensions. You can finally forget about complicated domain name administration interfaces - you can now update DNS records, assign URL forwarding, park limitless domains, etcetera in a very user-friendly way with only several mouse clicks.
Last, but certainly not least, it is possible to easily take care of both your domain names and your sites from the very same Control Panel, provided you also have a hosting account with AWP Hosting.


We welcomed our fourth child into the world on May 13th. Rachel Sophia is a beautiful, healthy girl, weighing 7lbs. 6oz at birth. I fell in love right away. She has big blue eyes and dark hair. All four of my kids have different color hair. Brooke, my seven year old, has dirty blonde hair. Alexandria, my 4 year old, has very red hair. Mark, my 19 month old has strawberry blonde hair. Six week old Rachel has the darkest hair of all. They are all uniquely beautiful, yet you can tell they are siblings. I am a very proud mama and am so happy I get to be home with my kids.
When I had Mark, I was still teaching and had to go back to work when he was only two months old. Those were the hardest months of my life. I felt torn, like I wasn't being a good enough mother, wife, or teacher. There just wasn't enough of my to go around. Now, I can devote my attention to my children and husband. I make enough money tutoring a few hours per week to cover my school loans. I hope to get more jobs as it would be great to make a living at tutoring, It is something I love, and it allows me to make my own schedule.
May and June have been good months in terms of pulling (I know June is not over yet, but I'm on a good streak). I've had many more good days than bad days lately; although I have not had a totally pull free day in weeks. I have mostly left my hair alone or stopped myself after only a few strands. Thank goodness because it's so thin on top and it is growing in soo slow. I have still been pulling my eyelashes and eyebrows. Although I want to stop that as well, I'm happy to be doing better with my scalp. The eyelashes and eyebrows are a much older habit that will be harder to break. As I have time and again. I can go months without touching my hair, but have never made it more than a few weeks with my lashes and brows.
I am proud to have done so well considering my extreme lack of sleep and stress over dealing with a high maintenance baby. With my 3 previous babies I have suffered from postpartum depression and anxiety, along with increased pulling. I've been a little down, but it is much better than in the past.I am using all my strategies to try and combat depression and anxiety and am doing well. I am taking magnesium, EPA, inositol and NAC. All of these are safe when breastfeeding and are beneficial to the baby.


text:
ANA Therapeutics and Quotient Sciences to Collaborate on Potential COVID-19 Treatment
ANA will use Quotient's formulation and manufacturing knowledge to develop and supply the drug product for clinical trials by the third quarter of 2020.
ANA Therapeutics, a biotech startup, and Quotient Sciences, a drug development and manufacturing solutions company, announced on August 11, 2020 that they are collaborating on the manufacturing of ANA Therapeutics' drug candidate, ANA001 (niclosamide capsules), for the potential treatment of COVID-19.
Under the terms of the agreement, Quotient will scale up the capsule formulation, and characterize and optimize the manufacturing process of the drug candidate through to clinical trials using its facility in Garnet Valley, PA, according to a Quotient press release. ANA will use Quotient's formulation and manufacturing knowledge to develop and supply the drug product for clinical trials by the third quarter of 2020.
"We have selected Quotient Sciences as our development and manufacturing partner and our plan is simple," said Andrew Bartynski, chief operation officer, ANA Therapeutics, in the press release. "Niclosamide has the potential to be an effective antiviral agent to combat COVID-19, and our top goal is to complete a clinical trial to determine its efficacy in treating patients with COVID-19. Quotient's speed and agility will play a key role in reaching that important milestone."
"We are proud to partner with ANA Therapeutics in their pursuit of a treatment to fight this coronavirus pandemic," added Mark Egerton, PhD, CEO of Quotient Sciences, in the press release. "Our experience and flexible manufacturing approaches will enable ANA Therapeutics to initiate clinical testing in an accelerated timeframe."
Source: Quotient
Supplier News | COVID-19 Update | Deals, Development and Manufacturing | Partnerships | News


Use An Online SurveyCompany For Free!
Discover The Benefits Of Using Online Survey Companies Such As QuestionPro! Easily Create And Distribute Surveys For Free.
Since all of QuestionPro's features are optimized for mobile, you can easily make surveys on your tablets and smartphones.
1. Starting Blank: You can begin with a blank template, choosing from a variety of question types, such as simple, multiple choice or advanced types that employ multimedia.
2. Importing: If there's a questionnaire or survey questions that you already have, you can import them into the editor using Microsoft Word.
3. Templates: With over 100 survey templates to select and customize, you can create the perfect survey to distribute to your respondents. There are many topics covered in the template library. As a survey company, QuestionPro provides only the best in survey templates, which can be found here.
The customer service templates help to gauge how your customers feel about your business, particularly the quality of your products, effectiveness of your service and atmosphere of your stores.
Obtaining the opinions of your employees can help to recognize potential issues in the workplace that may be negatively affecting productivity.
Teachers working in a classroom environment should be conducting surveys to their students, obtaining their perceptions on the course, as well as the entire program curriculum as well.
Step 3: Select which way you'd like to create your survey. You can select a ready-made template from the survey library, import existing questions that you'd like use or simply start with blank template. QuestionPro provides you with several customization options, allowing you to easily rearrange questions, add question branch logic, change fonts, color themes and more.
How easy is it to sign up and start creating questionnaires? Are you able to register using just your email address or your social media accounts? Once you're in, how many different ways do you have to create surveys? Are you able to browse a template library that's filled with over 100 pre-made surveys that you can use for brainstorming or for general use? What if you need to start from a blank template? Can you choose from over 30 different question types, including simple sliders or advanced side-by-side matrices? What you have questions you'd like to import and use? Can you easily import them into the editor?
With QuestionPro, you can have everything above, plus much more!
Once your survey is made, what choices do you have for sending it out? If you don't have any respondents and need to purchase a group with specific demographics, such as age and location, are you able to do that? Let's say you'd like to use your social media connections as your respondents. Can you easily post your survey to your Facebook or LinkedIn walls? What if you need your survey embedded on your website or blog? Can you easily embed it using the provided HTML?
QuestionPro has all of these options available to you plus more.
When you have survey results coming in, what are you able to do with them? Are you able to view a simple, real-time, report and see how many people viewed your survey, completed it and the average time it took? When you have the responses you need, do you have any visualization tools available that allow you to create word clouds and infographics? As for analysis, what are you able to do from within the interface? Can you perform trend and TURF analysis? What about filter data or create pivot tables? In addition, can you export your results to Dropbox or Google Docs?
You can do everything mentioned above and more.
After you create and account, you can start making surveys right away. You can choose from three different options for survey creation, including browsing a huge template library, uploading existing questions or starting from blank template. You can customize your surveys with a variety of options, including browsing pre-made themes, or modifying the CSS so you can change the font or color of any aspect of your survey. You can also employ question logic in your surveys, which allows the user to skip or alter certain questions based on their previous answers.
When your survey is created and you're ready to send it out, you have many options available to you, including easily embedding to your website or blog, quick uploading of email lists as well as posting to your social media channels from within the interface. You can also create a QR code that links directly to your survey that you can put on virtually anything. If you know you're going to be working offline, you also have the choice of downloading the QuestionPro App to allow you to do so.
When you have responses starting to come in, you can do quite a number of things with the responses as well. You can easily export your results to cloud services like Dropbox or Google Docs, in addition to downloading a raw data file. For analysis, you can filter data, create cross tabs or perform trend and TURF analysis. For reports, you can create great looking infographics and word clouds with your data, as well as viewing real-times summaries that detail the number of people that took your survey and the time it took them to finish.


text:
Research and Development Fund (Efficiency for Access Coalition)
#Convocatorias externas #Convocatorias en el Reino Unido de Gran Bretaña e Irlanda del Norte
Deadline: 16 January 2019.
Efficiency for Access Coalition launches research and development fund to accelerate innovation in off-grid and weak grid appliance technologies.
Research & Development projects must focus on developing an innovative appliance technology or product for use in off-grid and weak-grid settings, which has both a strong potential to positively benefit targeted users and to scale. Research & Development projects must also take into account gender equality and social inclusion issues.
In this round, grants are available from £50,000 to £200,000.
There are 3 options to apply for a grant, depending on the stage of the R&D project:
Early stage for feasibility studies (lasting 6 to 12 months)
Mid-stage for industrial research (lasting 12 to 24 months)
Late stage for experimental development (lasting 12 to 30 months)
Applicants must be a legally registered and physically established business, academic organisation, non-profit, public sector organisation, or research and technology organisation from anywhere in the world.
Applicants for funding may also form partnerships (such as between academics and businesses, or between entrepreneurs and established businesses).
Applications must demonstrate outcomes linked to both the EforA Coalition's overall objective of accelerating energy access via improved availability, affordability, efficiency and performance of a range of Low Energy Inclusive Appliances particularly suited to developing country contexts, and the R&D scope for this round.
Applicants must demonstrate sufficient match funding for project costs.
Applicants must demonstrate a track record in research and innovation, and/or provide strong evidence of their capacity to successfully implement the R&D project.
Deadline: 16 January 2019 at midnight GMT (19:00 Colombian time)
(AAT)
[Boletín SIUN 418, 29/30 de noviembre de 2018]


text:
· Posted on Aug 23, 2021
Lizzo Says She "Smells Better" Since She Stopped Using Deodorant, And I Wasn't Expecting This
Lizzo has entered the celebrity hygiene chat.
by Rachel Brodsky
BuzzFeed Contributor
Adding a new layer to the ongoing celebrity hygiene chat, Lizzo has revealed in her Instagram story that, like Matthew McConaughey, she no longer wears deodorant.
Joce / GC Images / Getty Images
For context, Matthew famously gave up wearing deodorant 35 years ago, telling People magazine in 2005 that he hadn't "worn deodorant in 20 years."
Gary Miller / Getty Images
Alright, alright, alriiiiight
"Ok I'm w him on this one," Lizzo wrote. "I stopped using deodorant and I smell BETTER."
View this photo on Instagram
@Lizzo / Via instagram.com
OK, once and for all, let's talk about what the best course of action is for deodorant.
Laylabird / Getty Images
If you quit using an antiperspirant, Well + Good notes that your skin's natural microbiome can potentially reset.
Moyo Studio / Getty Images
"Antiperspirants work by lowering levels of odor-causing bacteria that live in the underarms," Dr. Joshua Zeichner told them. "Some people speculate that stopping use will help your skin's natural microbiome reset, though it is unclear whether this has any significant impact on your health."
After extended use, your body might also develop a resistance to the product you've been swiping on. So a break isn't a bad idea.
Bymuratdeniz / Getty Images
"There is anecdotal evidence that the body may develop some so-called resistance to antiperspirants over time," says Lyall Gorenstein, MD, surgical director at the Columbia University Hyperhidrosis Center. "It's unclear why this happens, yet many patients recognize this phenomenon."
In conclusion, it may not be a bad idea to give your body a deodorant break, especially if you're still sheltering in place — and you can now do so with Lizzo's seal of approval!
Cbs Photo Archive / CBS via Getty Images


Everyone knows that as more things become 'connected,' the more at risk we are of being hacked. A report from last year showed that Mattel's latest Wi-Fi enabled Barbie could easily be exploited by attackers, allowing them to spy on users and listen in on conversations, and toy maker VTech suffered a data breach in November that included many photos and chat logs involving children. Now, it seems that more vulnerabilities have been exposed in products aimed at kids, this time in Fisher-Price's "Smart Toys" range and a line of hereO GPS watches.
The flaws, which were published in a blog from security firm Rapid7, have since been addressed and fixed by both sets of vendors, but they are yet another example of internet-enabled products being released with glaring security holes.
The problem with the Fisher-Price toys was that many of the platform's web service (API) calls were not appropriately verifying the sender of messages, this meant that would-be attackers could have sent requests that should not otherwise have been authorized. From here, a hacker could find all customers' accounts and associated children's profiles – including name, birthdate, gender, language, which toys they played with, and more.
In Rapid7's post, researcher Mark Stanislav said that an attacker "could hijack the device's functionality and manipulate account data, they could effectively force the toy to perform actions that the child user didn't intend, interfering with normal operation of the device."
The second security flaw revealed by Rapid7 could have resulted in a more direct threat. The hereO GPS platform lets families keep track of each other through the use of a mobile app and cellular-enabled watches. Like the Fisher-Price toys, an authorization flaw was found in the platform's web service. This could have allowed a hacker to trick a family and add themselves to their group, enabling them to see each person's location, history, profile details and even message them.
The hereO issue was fixed on December 15 after Rapid7 submitted the initial report on November 2. Stanislav praised both companies for their speedy response to the reported problems.
"We've seen a significant number of IoT toy vulnerabilities disclosed over the past six months, and we expect this trend will continue as new toys hit the market," Stanislav added. "I can't stress enough how critical a time it is for manufacturers of connected toys – and IoT devices in general – to think about building security in at the development phase."
Update (Feb 7): In regards to hereO's vulnerability, the company issued the following statement: "The vulnerability was patched within 4 hours of identification, we had yet to commence shipping of our GPS watches at the time, and most importantly, we can confirm that none of our users' data or security was compromised." Eli Shemesh, CTO hereO.


text:
ANC Calls for Presidential Elections By April 303 min read
Jan 24, 2018 | Analysis
On January 23, in a move that likely put an end to the negotiating process in the Dominican Republic and quickly provoked widespread international condemnation, Venezuela's National Constituent Assembly (ANC) approved a decree that obligates electoral authorities to hold presidential elections by April 30, 2018.
Venezuelan legal scholar José Ignacio Hernández has argued that there are many things wrong with the ANC's announcement. First and most importantly, the ANC itself was illegally convened without holding a referendum over its proposed creation as mandated by the 1999 Constitution. As a result, its decisions have no legitimate basis. Second, the National Electoral Council (CNE) is the sole institution with the authority to initiate the call for (or "convocar") presidential elections. Finally, Hernández suggests that while there is no formally mandated date for holding elections this year before the start of a new presidential term on January 10, 2019, Article 298 of the Constitution clearly states that the CNE must announce elections with at least six months' notice. The ANC decree obligates the CNE to organize a vote in less than half that time.
As electoral analysts like Edgar Martinez have suggested, it appears unlikely that that this timeframe would even allow for an election which meets "minimum technical conditions" to avoid the kind of fraud that apparently took place in the Bolivar state gubernatorial race in October.
This fact has not been lost on the international community. The Lima Group, which was meeting in Santiago, Chile, on the same day as the announcement, issued a ten-point statement of strong condemnation. According to the document the decision "makes democratic, transparent and credible presidential elections in accordance with international standards impossible, and contradicts democratic and good faith principles of dialogue between the government and the opposition." The statement also asserted that elections that fall short of free and fair elections would "lack legitimacy and credibility," reiterated the group's rejection of the ANC, repeated past offers of aid and called for investigations into extrajudicial executions and other abuses.
The Lima Group statement provided an indication of growing hemispheric concern over the crisis. This was the first time since the Lima Group's August creation that a collective statement received more than the 12 signatures of the group's founders. This time, Guyana and St. Lucia added their signatures, making a total of 14 countries. Jamaica, meanwhile, appeared to have sent a representative (as it has in past meetings) but did not sign the document.
The United States is not part of the Lima Group, and no U.S. officials took part in the Santiago meeting. Yesterday State Department Spokesperson Heather Nauert said the announcement was "news to [her]" in a press conference, but hinted at the U.S. position by saying the State Department "support[s] a real, full, and fair election system there and not the illegitimate constituent assembly that was put together by Maduro and the Maduro regime."
While the EU—which approved targeted sanctions against seven Venezuelan officials on Monday—did not issue an immediate statement on the announcement, Germany's Foreign Ministry responded to the news by calling it "cause for concern" and calling for elections to be held "with significant time in advance."
The ANC's move also probably ended the negotiating process between the government and the opposition, which had been taking place in the Dominican Republic. In response to the ANC decision, Mexican Foreign Minister Luis Videgaray—who had been acting as an opposition-appointed observer of the talks alongside Chile's Heraldo Muñoz—announced Mexico would be pulling out of the process. Muñoz, meanwhile, appeared to indicate Chile was reserving judgement until more emerged about the specific conditions under which the vote would take place. If these lacked "minimum guarantees," then Muñoz said Chile would back out as an observer. Nevertheless, the odds of talks restarting appear slim. Venezuelan opposition lawmaker Luis Florido, who has been taking a leading role in the negotiations, described them as "moribund" and said the only hope of revitalizing them lay in the government committing to a preliminary accord from December agreeing to clean elections and accepting international aid.
PreviousDavid Smilde Interview in VOA on the Opposition's Electoral Dilemma
NextGeoff Ramsey in AP on Upcoming Elections in Venezuela


text:
Insider > Business > Avenue Supermarts Limited (DMart): Sample Research Report
Avenue Supermarts Limited (DMart): Sample Research Report
Ayushi Upadhyay
Created on 27 Apr 2021
Read by 11.9k people
Started in 2002 with a single mission to be the lowest priced retailer in its area of operation, Avenue Supermarts Limited is a Mumbai-based company, which owns and operates DMart stores. DMart is India's largest supermarket chain that offers customers a range of household and personal products under one roof. The Company offers a wide range of products with a focus on Foods, FMCG and General Merchandise & Apparel product categories.
DMart was conceived by Value Investor Mr Radhakishan Damani by operating a single store in Maharashtra, and it took eight years to start its first ten stores. DMart has grown steadily over the years and operates 216 stores in 11 states and 1 Union Territory of India as of July 2020. Avenue supermart was ranked 33 in 2019 among all listed companies in the Bombay Stock Exchange.
Business Model of DMart
The Company comprises everyday use products for its customers, which are categorized as Foods, Non-foods and General Merchandise & Apparel. The chain operates on a B2C (Business to Consumer) model, where goods are directly sold from the manufacturers or big traders to the end-user.
DMart follows another successful retailer, Walmart's business model of "Everyday low cost - Everyday low price (EDLC-EDLP)", and is focused on high inventory turnover. DMart sells most of its products that are needed on a day-to-day basis. Throughout the year, demand and readily available products at low-cost margins allow it to reduce the risk of demand fluctuation and therefore provide consistency to the business.
Unlike any other Retail business, DMart follows a cluster-based expansion approach. The Company's focus is on deepening their penetration in the areas where they are already present before expanding to newer regions. Due to its business model, all its franchises are profitable. This is very rare to see in retail stores where even Reliance Fresh was forced to shut some of its stores due to declining profits.
DMart makes timely payment to their suppliers, so they are able to get an extra discount for sourcing the products in bulk. Amidst this lockdown, it has also started home deliveries through DMart Ready App, which would provide home delivery. This could be a direct competition to Amazon Pantry and other online startups.
The majority of its revenue is from the foods segment, which accounts for more than half of its total revenue, while General merchandise and apparel cover up its remaining part.
What is the moat?
DMart is a brilliant business whose moat lies in its supply-chain management - the way they maintain their inventory, pay their suppliers on time, get the best prices from the suppliers, ensure the quality of the products, pass on the gains to the customer wherever they can and so on. They have great consistency in debtor days, inventory turnover and other return ratios, which are enviable in the retail business.
What is good?
Organic Growth: Though the Company's store expansion process is slow compared to others, the strategy has helped it to remain self-sustained and avoid debt in its balance sheet.
Better at cost-cutting: They own property rather than renting it. They don't open stores in shopping malls and have acquired a 'store ownership model', owning most of their stores or have taken these on a 30-year lease term. So, they have managed to avoid rental costs, unlike other retail chains. You will notice that most of the stores are not in prime areas; this helps them keep initial investments low. Furthermore, there's no spike in rent in future as property is owned by them. This is one of their success mantras. They have also managed to cut down their costs as they don't spend much on marketing, advertising and interiors.
Discount policy: A good discount policy separates DMart from its competitors. The retailer sells essential goods at a deep discounted price which most competitors cannot match, and this helped them strengthen their roots in the market.
Low Price Products: The non-branded products like bedsheets, towels, and Garments are sold at very low prices to attract target customers, which generates a huge volume for these products.
Prompt payment to suppliers: They negotiate very aggressively with vendors by making payments within 7-10 days, whereas its competitors make payments in 20 to 30 days. This makes vendors offer a good discount to DMart on its products.
What is bad?
Focus on specific places: DMart is more focused on the Western and Northern Geography of the nation, unlike its competitors. This has disabled DMart from leaving an impact in the other regions of the nation, which slows down its growth.
Online retailers: With the technological shifts, people are more adamant about shopping online rather than going to the stores. This has created a strong economic moat for companies like Flipkart or Amazon, which deal in online retailing. Though DMart is also hoovering with its "DMart Ready app", capturing this space from existing players might be a big challenge for the Company to tackle.
The Company has delivered an extraordinary sales growth of 31% CAGR over the period of the last 5 years; meanwhile, the Company has exhibited even better profit growth of 43.78% CAGR in the same time frame (in its consolidated business). This is on account of the low-interest costs.
The Company has further maintained an operating profit margin of ~8% consistently throughout the years. This tells a lot about the stability of the Company. Due to the growing net profits and not much of the equity dilution, the earnings per share of the Company is also growing consistently.
The balance sheet of the Company also looks rock solid with not much of the equity dilution seen in the past and also with the aggressively growing reserves of the Company. The Company has further reduced its borrowings and current liabilities, thereby taking it to the path of being a virtually debt-free company.
With an increase in its number of stores from last year, the Company has also witnessed a spike in its fixed assets, thereby appreciating the value of total assets. The Company holds cash of Rs 107 Crores which can be further utilized in its expansion.
The leverage multiplier has declined as the Company removed long-term debt from its capital structure, which also improved its interest burden ratio. This is the reason for such a decline in return of equity over the years. The asset turnover has also seen a sharp improvement over the years, indicating that it has been increasing its efficiency in using assets to generate revenues.
The Indian retail market is poised to grow at a CAGR of about 13% to reach a massive $ 1.75 Trn by 2026! And organized retail players like DMart could get a bigger pie of the market. With its organic growth strategy, affordable products, deep discount policy, efficient supply chain management, consistent growth in both its topline and bottom-line, a low-debt capital structure and a strong balance sheet.
Altogether, DMart could be the retail hero of tomorrow. It remains to be seen how it leverages the power of tech to capture the increasingly online-inclined Indian market. Competition is rife, but growth potential is immense!
90 Post Likes
A Keen Learner. Tiny, brainy, and studious, this quiet one stays in her zone until she pops. And once she does, boy, are her comebacks snappy! There is no financial question that she can't answer through her magical blog-writing.
Value Investing Business Models Company Analysis Stock Markets
IDFC First Bank - Business Model & Research Report
IRCTC Business Model & Research Report
A Deep Scan on How to Pick Stocks
Big Shots
Exide Industries: A 52-Week-High Lie
Under Business
Urja Global Ltd - Bullish or Bullshit Green Energy
India's Football Fever Immunity
What is Venture Capital?
Divi's Labs Ltd: A bet on Make in India
https://insider.finology.in/business/avenue-supermarts-research-report


Today, the primary performance bottleneck is in CPU-centric design, which cannot scale further in terms of performance. The industry has begun to move away from CPU-centric architecture, opting instead to depend upon the network as a co-processor. By creating synergies between the software and the hardware, Co-Design architecture is the most recent paradigm shift for the high-performance computing industry.
Co-Design is a necessary step toward Exascale performance by taking a holistic system-level approach to fundamental performance improvements. Co-Design architecture enables all active system devices to become acceleration devices by orchestrating a more effective mapping of communication between devices in the system. This produces a well-balanced, efficient system that spreads the responsibilities within the network across the various compute elements, interconnect, and data storage infrastructures.
In the high performance computing industry, there is constant demand for greater performance in the data center. Every new generation of hardware produces faster, more reliable, and more efficient systems to try to keep up with that demand. In the past 20 years, high performance computing systems have experienced a 1,000,000 times performance increase, and yet, we've only begun to scratch the surface.
Beyond the technology improvements, though, there have been three major paradigm shifts that have enabled such growth within the industry. The first major change occurred when the industry moved from symmetric multiprocessing (SMP) architecture to clusters, taking advantage of high speed networking and off-the-shelf components that can scale as needed and deliver a more cost-effective structure. The second shift occurred when it was no longer feasible to improve performance by increasing the CPU frequency. This led to a move from single core to multi-core processors, which relied on scalable interconnect to handle so many more processors per server in order to multiply performance.


text:
class RemoveTeacherNameFromStudents < ActiveRecord::Migration
  def change
    remove_column :students, :teacher_name
  end
end


text:
ON BROADWAY: Halloween Week Begins with 'Misery' starring Bruce Willis & Laurie Metcalf
Halloween is in full swing here in NYC and I like to take full advantage. Scary movies are always a win any time of year, as are scary TV shows (hey, The Walking Dead) but what better time to see a scary Broadway show then right now?
OK, so Misery is a play adaptation of a scary movie. Still. I worship at the altar of Stephen King so getting tickets to this was a no brainer. (Seriously, he's ruined most other authors for me because no one can measure up, but don't get it twisted -- I'm no Annie Wilkes. Ha ha.) Last night was the show's second official preview (read: before the show has technically opened) so not many details have even been released yet! That's how exclusive your girl is. #hairflip
So the real question you're asking yourself here is, if you're in New York City between now and February (when the show will be ending its limited run), should you go see Misery? Let me help answer that for you....read on, Broadway lovers.
First up, I think no one in the theater walked in to this show without seeing the iconic movie from 1990, starring Kathy Bates (who won an Oscar for her role) and James Caan. (If you haven't seen it, you have homework -- it's great.) The Broadway version is quite faithful to its source material and without giving too much away, there are key scenes in the build up to the show's climax that the crowd was clearly expecting (and got).
The show is set in 1987 (the year I was born!) and basically involves two characters: Bruce Willis, as author Paul Sheldon, and Laurie Metcalf, as Annie Wilkes. Sheldon is writing his latest novel in a small hotel in snowy Colorado not far from Wilkes's small cabin home and after getting into a potential deadly car crash that almost costs him his life, Wilkes -- a former nurse -- rescues him and begins nursing him back to health in her own home. She quickly reveals that she's a downright obsessive "fan" of Sheldon's, particularly of his Misery Chastain book series.
Basically, she takes fangirling to a whole other, deadly level.
By keeping Sheldon locked away from the world and utterly reliant on her alone, Wilkes coerces Sheldon to continue writing the next chapter of the book series for her own selfish amusement, growing increasingly violent and manipulative toward Sheldon to force him to comply.
The set itself was an achievement, brilliantly designed with four different scenes set up on a spinning Lazy Susan like round table -- Annie's front porch (pictured in my photo above), her kitchen, her living room/staircase, and the room she locks Sheldon in. Herein also lied where some sticky moments happened in the preview performance I saw with late entrances by actors who have to change costume -- kinks that will inevitably be worked out with time.
Metcalf was utterly transfixing in her role, somehow managing to make sociopath Annie at times believably awkward, charmingly sweet, and totally terrifying. The comedic elements weren't too much of a surprise considering her roles on TV's Rosanne and The Big Bang Theory and while I do feel the show was much funnier and lighter than the film, the scarier parts were still legitimately scary. She played the dichotomy well and I wouldn't be surprised if she ends up nominated for a Tony Award for her performance.
I can't say the same for Bruce Willis however. I walked into the performance with a blank slate of expectation but his characterization of Paul Sheldon felt far too stiff and right off the page (pun not intended). Because of this, you felt less sorry for him when Annie acts so violently toward him. There were also two key "stunt" moments in the buildup of the storyline that were totally whiffed by Willis (one involving a match, another involving a typewriter -- no spoilers). To be totally fair, it was only the second preview night, and I'm sure once the actors warm up in their roles, these problems will cease to exist, but it was still disappointing.
That being said, the gruesome scenes still had serious impact. Much of the crowd reaction could be attributed to, like I said, most folks having seen the iconic film, creating a palpable tension of knowing the horrific things that will happen when key props are introduced (like, say, a sledgehammer -- or in the words of Fifth Harmony, a sledge-hamma). The groans and gasps were loud.
Overall, the show seems very promising. Horror is a genre that I wish was explored more in the Broadway medium and perhaps this will open the genre up to more in the future (I hear American Psycho is on dock and I can't wait). I'd say it's worth seeing if you loved the film or novel, or simply because Metcalf is incredible as Annie and has earned a whole new slew of respect for her portrayal. But it's definitely not for the kids -- or the squeamish.
Happy Halloween Week to you all! Love, your #1 fan...
by: Mel at: Saturday, October 24, 2015


Watching safety factors are essential in Lancashire and never subjecting you to ultimately dangerous circumstances isn't necessarily as easy in the duration of the process might picture.
You may use Private Investigator Burnley within Burnley to carry out background checks in Burnley to assure within circumstances just like you if you're distracted with a brand new love, positive about the brand new employee or even trusting people on social networking.
Are Your Facebook Pals In Lancashire Real?
Facebook has become more well-known but just as important is the volume of customers increases every day Apart from the quantity of phony information, Burnley would not be permitted to be excluded from this scenario.
You don't have to fear anymore about whether you could depend on the friends you've got on your Facebook as it may lead to strain in the home in Brownside or perhaps on the job in Habergham which can be needless, It is paramount to ascertain you are usually mindful of individuals with whom you Speak to .
Is My Friends Boyfriend The Person He Says He Is In Lancashire?
In the interest of your safety along with your friends' you ought to ascertain your pal's partner inside Lancashire is actually who he says he is.
If you have got into a romantic relationship with somebody you or your companions don't generally know in Habergham or Lane Bottom it can be unsafe, ensure you meet him in an open place or as part of a group.
Can My Partner And I Find Out Whether The Staff Is Capable To Perform The Job Inside Burnley?
Selecting staff inside Burnley regardless how tough it could be, actually need positive prospects have got specific attributes and also expertise that will these phones carry out every one of the specifications with the career function.
You will find not many giving outstanding assistance and lots of people within Lancashire and also the reliable encompassing areas won't be honest on their own Curriculum vitae, to enable them to possess aggressive benefit within the application within Burnley.
Are you needing Corporate Surveillance within Burnley to absolutely make sure a possible employee has been truthful within their cv?
Private Investigator Burnley monitoring within Burnley is carried out through dependable certified personal investigators to verify the particulars within the cv tend to be correct.
History monitoring within Burnley may look into the person you're courting via a cautious investigation by meeting with the people who all are familiar to them as well as confirming their house address with Dunnockshaw.
In Burnley, private detectives from Private Investigator Burnley have earned excellent accomplishments proving individuals are or are not who they claim to be.
In case you are becoming suspicious of a good friend on Facebook Private Investigator Burnley inside Burnley will certainly perform any Facebook track record security inside Burnley.
Private Investigator Burnley provides a fantastic final result in locating out your id regarding questionable pals simply by examining the genuine pals users inside Burnley.